2010-11-25 4 views
6

WCFサービスからWPFクライアントに一方向コールバックを呼び出すと、この困惑しているエラーが発生し続けます。WCF:一方向コールバックで問題が発生しました

メッセージは 0時01分00秒の割り当てられたタイムアウト内 転送することができませんでした。信頼性の高いチャネルの転送 ウィンドウに利用可能なスペースがありませんでした。この 操作に割り当てられた時間は、より長いタイムアウト の一部であった可能性があります。

あまりにも多くのデータを送信しているわけではありません。ただ1つの短い文字列しか含まれていない文字列のリストです。

私のサーバーには、次の設定があります。

<xml version="1.0"?> 
<configuration> 

    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 
    <system.serviceModel> 
    <services> 
     <service name="RawDealService.GameService"> 
     <endpoint address ="" binding="wsDualHttpBinding" bindingConfiguration="basicConfig" contract="MyService.IGameService"> 
      <identity> 
      <dns value="localhost"/> 
      </identity> 
     </endpoint> 
     </service> 
    </services> 
    <bindings> 
     <wsDualHttpBinding> 
     <binding name="basicConfig" messageEncoding="Text"> 
      <security mode="None"/> 
     </binding> 
     </wsDualHttpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="true"/> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="true"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 

</configuration> 

をそして、私のクライアントは、次の設定があります。

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.serviceModel> 
     <bindings> 
      <wsDualHttpBinding> 
       <binding name="WSDualHttpBinding_IGameService" closeTimeout="00:01:00" 
        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
        bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
        maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
        messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"> 
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
         maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
        <reliableSession ordered="true" inactivityTimeout="00:10:00" /> 
        <security mode="None"> 
         <message clientCredentialType="Windows" negotiateServiceCredential="true" /> 
        </security> 
       </binding> 
      </wsDualHttpBinding> 
     </bindings> 
     <client> 
      <endpoint address="http://localhost:44259/GameService.svc" binding="wsDualHttpBinding" 
       bindingConfiguration="WSDualHttpBinding_IGameService" contract="IGameService" 
       name="WSDualHttpBinding_IGameService"> 
       <identity> 
        <dns value="localhost" /> 
       </identity> 
      </endpoint> 
     </client> 
    </system.serviceModel> 

    <startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0" /> 
    </startup> 
</configuration> 

そのちょうどこのメッセージが比較的小さく、であることを考えると、起こり得ることを不可解コールバックは一方通行です。いくつかの異なるバインディングを試すべきですか?

+0

サービスインタフェースクラス(コールバックインタフェースも可能)を投稿できますか? – Rev

+0

@Rev下記を参照してください。私は問題を見つけましたが、明日まで自分の答えを受け入れることはできません。とにかくありがとう! – Ben

+0

あなたの歓迎: – Rev

答えて

6

私はこの問題を発見しましたが、この特定のエラーメッセージが完全に間違った経路を送ってきたことは残念です。

My DataContractセットアップには継承を持つクラスがいくつかありましたが、KnownTypeのマークが正しくありませんでした。

私の推測では、クライアントが関連オブジェクトを逆シリアル化しようとしましたが、失敗しました。このエラーは、フレームワークによってうまく処理されていてはならないし、何度も繰り返し送信しようとしていて、1分後に応答がありませんでした。

おそらく私は双方向の呼び出しを持っていたとすれば、より有益なスタックトレースが得られたでしょう。

+0

ありがとう!こっちも一緒 :( –

3

ネットワーキングの問題ではなく、ブロッキング/スレッドの問題のような臭いがあります。

任意の方法で、クライアントで片方向メッセージを受信するのをブロック/待機していますか?その場合、同期コンテキストを使用していると、WCFのデッドロックが発生しています。メッセージキューがブロックされるまでメッセージを受信できない間、メッセージキューをブロックします。

この場合、クライアントにUseSynchronizationContext=falseを設定するか、メッセージを受信するのを待つ間にブロックされないようにする必要があります。

しかし、私はWsDualHttpBindingに多大な経験はありません。

+0

良い考え。私はすでにこのプロジェクトでスレッディング問題の公平な分け前を実行しました。残念ながら、この問題はそれらの1つではないようです(私の答えは下記参照)。 – Ben

関連する問題