2011-05-11 12 views
2

私のアプリケーションは、Silverlightコントロールを含むMVC3 Webサイトで構成されています。 MVC3アプリケーションでは、私はWCFサービスをホストしています。私はDBからデータを取得するためにSilverlightコントロールでそのサービスを使用します。SilverlightからアクセスするWCFサービス

MVCのWeb.configでサービスを次のように定義される。私が呼び出すメソッドである

<system.serviceModel> 
<behaviors> 
    <endpointBehaviors> 
    <behavior name="OnlineCustomersTracker.Services.CustomersTrackerServiceAspNetAjaxBehavior"> 
     <enableWebScript /> 
    </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
    <behavior name=""> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="false" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" 
    multipleSiteBindingsEnabled="true" /> 
<services> 
    <service name="OnlineCustomersTracker.Services.CustomersTrackerService"> 
    <endpoint address="" behaviorConfiguration="OnlineCustomersTracker.Services.CustomersTrackerServiceAspNetAjaxBehavior" 
     binding="webHttpBinding" contract="OnlineCustomersTracker.Services.CustomersTrackerService" /> 
    </service> 
</services> 

:Silverlightで

[OperationContract] 
[WebGet(ResponseFormat = WebMessageFormat.Xml)] 
public string DoWork() 
{ 
    // Add your operation implementation here 
    return "Work done"; 
} 

Iがサービスを呼び出す:

CustomersTrackerServiceClient client = new CustomersTrackerServiceClient(new BasicHttpBinding(), 
                       new EndpointAddress(
                        "http://localhost:62535/Services/CustomersTrackerService.svc")); 
     client.DoWorkCompleted += new System.EventHandler<DoWorkCompletedEventArgs>(client_DoWorkCompleted); 
     client.DoWorkAsync(); 

Silverlightからサービスにアクセスしました。例外があります。リモートサーバーからエラーが返されました:NotFound。

奇妙な部分は、サービスがWebブラウザから機能していることです。私は間違って何かをしていますか? ?

application request

私はFirefoxとSilverlightコントロールからのコールがサービスアドレスにポストやっているトレースさ:http://localhost:62535/Services/CustomersTrackerService.svcを。私のサービスは、取得リクエストのみを聞いているようです。投稿のリクエストを許可する方法はありますか?リクエストを取得するためにSilverlightでサービスを設定する方法はありますか?

+0

クロスドメインとクライアントアクセスポリシーファイルを追加しようとしましたか?違いはありますか? –

答えて

1

私はついにこの問題を発見しました。私はエンドポイントを正しく設定しなかった。 実際には、jsonというエンドポイントが1つしかありませんでした。 複数のエンドポイントを持つサービスを設定するための素晴らしい記事が見つかりました。 http://www.codemeit.com/wcf/wcf-restful-pox-json-and-soap-coexist.html

1

この一般的なエラーはあまり役に立ちません。一般的には、サービスにログインできるようにすることで、より多くの運が得られる可能性があります。これは、多くの状況でこのエラーがスローされるため、何がうまくいかないかについてのポインタを提供します。

<configuration> 
.... 
<system.diagnostics> 
<trace autoflush="true" /> 
<sources> 
    <source name="System.ServiceModel" switchValue="Verbose"> 
    <listeners> 
     <add name="sdt" type="System.Diagnostics.XmlWriterTraceListener" initializeData="D:\path\to\wcfLog.svcLog" /> 
    </listeners> 
    </source> 
</sources> 
</system.diagnostics> 
</configuration> 

あなたが持っている可能性がある他の問題は、あなたが最初のサイトを試してみて、アクセスする場合は特に、クロスドメインの問題です:あなたがサービスのための設定ファイルに以下を追加することができますロギングを有効にするには

Silverlightクライアントで初めて。 crossdomain.xmlとclientaccesspolicy.xmlをWebサイトのルートに追加する必要があります。

これらは、このようなXMLが含まれている必要があります。

のcrossdomain.xml

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> 
<cross-domain-policy> 
    <allow-http-request-headers-from domain="*" headers="*" /> 
</cross-domain-policy> 

ClientAccessPolicy。XML

<?xml version="1.0" encoding="utf-8"?> 
<access-policy> 
    <cross-domain-access> 
    <policy> 
     <allow-from http-request-headers="*"> 
     <domain uri="*"/> 
     </allow-from> 
     <grant-to> 
     <resource include-subpaths="true" path="/"/> 
     </grant-to> 
    </policy> 
    </cross-domain-access> 
</access-policy> 

Silverlightのクライアントが試してみて、あなたのサイトのルートにこれらのファイルにアクセスし、それがIISでホストされたASPサイトですので、もし、あなたは簡単であるべき、そこからそれらを提供する必要があります。 Details on MSDN

サービスが自己ホストされているが、セットアップがより複雑な場合は、WCFサービスを提供することができます。 Some details on a self hosted solution

関連する問題