私は認める数時間苦労してきました。Silverlight アプリケーションと WCF Web サービスの間のバインディング/構成で何か不足しているに違いありません。しばらくは機能していましたが、誤っていくつかの設定を変更したに違いなく、もう機能しません。
Visual Studio でデバッグすると、Service と Silverlight アプリケーションの両方が同時に起動し、デバッグ用に web.config ファイルで Windows 認証が無効になります。展開したら、構成ファイルに戻って変更し、Windows セキュリティ/トランスポートを有効にして、Web サービス側でユーザー資格情報を取得できるようにします。
IIS を使用して WCF サービスと Silverlight アプリケーションの両方を別のマシンに展開すると、WCF サービスに接続しようとすると、Silverlight から "Not Found" エラーが発生します。誰かが存在するさまざまな構成ファイルと、それぞれが何を指しているべきかを説明してもらえますか? それぞれの場所にある構成ファイルは次のとおりです。
wwwroot\webserviceapp\web.config
<?xml version="1.0" encoding="UTF-8"?>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpEndpointBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="ServiceBehavior" name="WebserviceName.Service1">
<endpoint address="" binding="basicHttpBinding"
bindingConfiguration="BasicHttpEndpointBinding"
name="BasicHttpEndpoint" contract="WebserviceName.IService1">
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
wwwroot\web.config - これは Silverlight の web.config だと思いますか?
<?xml version="1.0" encoding="UTF-8"?>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpEndpoint" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://<<<ip_to_machine>>>/webserviceapp/Service1.svc"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpEndpoint"
contract="ServiceReference1.IService1"
name="BasicHttpEndpoint" />
</client>
</system.serviceModel>
<system.webServer>
<defaultDocument>
<files>
<add value="ProjectTestPage.html" />
</files>
</defaultDocument>
</system.webServer>
wwwwroot\ClientBin\SilverlightApp.xap (ServiceReferences.ClientConfig ファイル):
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpEndpoint" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<security mode="TransportCredentialOnly" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://<<<ip_to_machine>>>/webserviceapp/Service1.svc"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpEndpoint"
contract="ServiceReference1.IService1"
name="BasicHttpEndpoint" />
</client>
</system.serviceModel>
これらは、私が間違っていない限り、すべてを駆動しているように見える 3 つの構成ファイルですか? 私はある環境で開発し、別の環境にデプロイするので、これらのファイルを変更して適切なリソースを指すようにする必要があるようです。Silverlight アプリケーションを新しいマシンにデプロイした後に実行すると、アプリケーションがロードされます。読み込みが完了すると、最初の Web サービス呼び出しが例外で失敗し、Chrome コンソールに次のように表示されます。
Failed to load resource: the server responded with a status of 500 (Internal Server Error) http://<<<ip_to_machine>>>/webserviceapp/Service1.svc
Failed to load resource: the server responded with a status of 500 (Internal Server Error) http://<<<ip_to_machine>>>/webserviceapp/Service1.svc
Uncaught Error: Unhandled Error in Silverlight Application An exception occurred during the operation, making the result invalid. Check InnerException for exception details. at System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()
at Project.ServiceReference1.GetAllNewsCompletedEventArgs.get_Result()
at Project.View.Home1.ClientGetAllNewsCompleted(Object pSender, GetAllNewsCompletedEventArgs pEventArgs)
at Project.ServiceReference1.Service1Client.OnGetAllNewsCompleted(Object state)
私は、サービスが決してヒットしないことを 99% 確信しています。呼び出されている関数の一番上にログ ステートメントがあり、何もログに記録されません。
IIS 構成: Web サービス認証: 匿名 = 無効 ASP.NET 偽装 = 無効 Windows 認証 = 有効
既定の Web サイト (Silverlight アプリがホストされている場所): 匿名 = 無効 ASP.NET 偽装 = 無効 Windows 認証 = 有効
誰にも提案がありますか、またはデバッグを支援するために私からの情報が必要ですか?
編集:別のマシンからサービスに移動して、サービス wsdl を正常に表示できることは注目に値します。例えば:
http://ipaddress/webserviceapp/Service1.svc
私はこれを問題なく見ることができます。エラーはありません。