誰かが私のクロスドメインポリシー地獄から私を解放できるかどうか疑問に思っていました.
を使用する二重 WCF サービスがnetTcpBining
あり、クライアントは Silverlight 4 アプリです。サービスを自分でホストすると、サービスは完全に機能し、Silverlight クライアントは問題なくサービスを利用できます。ただし、IIS 7 でホストすると、問題が発生します。IIS でホストすると、次の場所でサービスを確認できます。
http://localhost/Conference/VideoConferenceService.svc
そして、IIS でホストされているサービスへの参照を追加し、それを呼び出そうとすると、次のようになります。
CommunicationException: net.tcp://localhost/Conference/VideoConferenceService.svc に接続できませんでした。接続の試行は、00:00:03.3071892 の期間継続しました。TCP エラー コード 10013: アクセス許可によって禁止されている方法でソケットにアクセスしようとしました.これは、サービスがクロスドメイン アクセス用に構成されていないときに、クロスドメインの方法でサービスにアクセスしようとしたことが原因である可能性があります. サービスの所有者に連絡して、HTTP 経由でソケット クロスドメイン ポリシーを公開し、許可されたソケット ポート範囲 4502 ~ 4534 でサービスをホストする必要がある場合があります。
または、実際のエラーを見て、以前に見たことのある人に刺激を与えるのに役立つ場合は、次のように私に投げかけますReference.cs
:
クロスドメイン ポリシー エラーの解決に関して提案されたほぼすべての解決策を確認しclientaccesspolicy.xml
、IIS の既定の Web サイト ルートとwwwroot
. また、すべてのファイアウォールをオフにしました。ポリシーは athttp://localhost/clientaccesspolicy.xml
とat で確認できますhttp://127.0.0.1/clientaccesspolicy.xml
が、それでもこのエラーが発生します。
IIS 7 でホストされているサービスの web.config は次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<gcServer enabled="true" />
</runtime>
<system.web>
<compilation debug="false" />
</system.web>
<system.serviceModel>
<services>
<service name="VideoServer.VideoConferenceService">
<endpoint address="" binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IVideoConferenceService" contract="VideoServer.IVideoConferenceService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:4502/VideoServer/" />
</baseAddresses>
</host>
</service>
</services>
<bindings>
<netTcpBinding>
<binding name="NetTcpBinding_IVideoConferenceService" portSharingEnabled="true" transactionFlow="false" transferMode="Buffered" listenBacklog="2147483647" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxConnections="2147483647" maxReceivedMessageSize="2147483647" closeTimeout="24.20:31:23.6470000" openTimeout="24.20:31:23.6470000" receiveTimeout="24.20:31:23.6470000" sendTimeout="24.20:31:23.6470000">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<reliableSession enabled="false" />
<security mode="None">
<message clientCredentialType="None" />
<transport protectionLevel="None" clientCredentialType="None" />
</security>
</binding>
</netTcpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="False" />
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
<system.webServer>
<directoryBrowse enabled="true" />
</system.webServer>
</configuration>
Silverlight クライアントのServiceReferences.ClientConfig
ファイルは次のとおりです。
<configuration>
<system.serviceModel>
<bindings>
<customBinding>
<binding name="NetTcpBinding_IVideoConferenceService">
<binaryMessageEncoding />
<tcpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="net.tcp://localhost/Conference/VideoConferenceService.svc"
binding="customBinding" bindingConfiguration="NetTcpBinding_IVideoConferenceService"
contract="ServiceReference1.IVideoConferenceService" name="NetTcpBinding_IVideoConferenceService" />
</client>
</system.serviceModel>
</configuration>
誰か提案はありますか?この厄介なエラーには、これまで何日もかかりました。どんな助けでも大歓迎です。
編集
フィドラーを使用して Web セッションで取得されているファイルを確認すると、ブラウザーがクライアント アクセス ポリシー ファイルを取得していることがわかるので、エラーは別の場所にあり、WCF がこのエラーをスローしていると思いますか? また、閉じるたびにキャッシュをクリアするようにIE9を設定しました。以下をご覧ください。