2012-04-12 12 views
6

私は2つのアプリケーションを使用していますが、1つはnet.tcpバインディングを使用するように構成された自己ホスト型サービスです。サービスのServiceBehaviorAttributeを用いて構成されている:両方についてWCF:数秒間実行した後のEndpointNotFoundException

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, 
       InstanceContextMode = InstanceContextMode.Single, 
       IncludeExceptionDetailInFaults = true, 
       UseSynchronizationContext = false, 
       ValidateMustUnderstand = false)] 

、サービスおよびクライアントtransferModeがストリーミングに設定され、タイムアウトがある:

closeTimeout="00:01:00" 
openTimeout="00:00:30" 
receiveTimeout="00:02:30" 
sendTimeout="00:02:30" 

MaxConnectionsを500に設定し、ServiceThrottlingBehaviorが使用されていますWCF 4デフォルト値:

  • MaxConcurrentSessions:100 * ProcessorCount
  • MaxConcurrent呼び出し:16 * ProcessorCount
  • MaxConcurrentInstances:defaultは、上記と同じパターンに従う上記2つの合計です。

私はクアッドコアマシンを使用しており、Net.Tcp Port Sharingサービスが有効になっています。

クライアントアプリケーションには、ChannelFactoryクラスを使用して作成されたサービスへの単一のチャネルがあります。チャネルが作成されると、100スレッドが生成されます。各スレッドはチャネルを使用して、1秒あたり1メッセージの頻度でメッセージをサーバーに送信します。秒のカップルは、[OK]を実行した後

(クライアントがサーバーにメッセージを送信するAN、それはそれらを正しく受信)EndpointNotFoundException次のメッセージがスローされます。

Could not connect to net.tcp://localhost/service. The connection attempt lasted 
for a time span of 00:00:02.1777100. TCP error code 10061: No connection could 
be made because the target machine actively refused it 127.0.0.1:808. 

奇妙な事がある:

  • 同じマシンで両方のアプリケーションを実行すると、例外の時間間隔は約2秒ですが、マシンのサーバーアプリケーションと別のマシンのクライアントアプリケーションを実行すると、例外のタイムスパンは常に1秒です。
  • 例外はスローされず、両方のアプリケーションが正常に動作します(10分の1のような)。
  • 例外がスローされる前に、サーバーはメッセージを受信して​​正しく処理します。例外はサーバーにスローされません。

私は、オープン、クローズを変更し、それを増やし、スレッドの量を減らし、多くのテストを行って受信し、低下させるために、タイムアウトと高い値を送信、MaxConnectionsをのためのより高い値を設定することが、結果は常にあります同じポイントで、EndpointNotFoundExceptionがスローされます。私はあきらめてコードを変更して、各スレッドが独自のチャンネルを持っているので、これが問題を修正することを期待していますが、なぜこれが起こるのか知りたいのです。誰かが私が間違っていることを知っているか、調査を続けるために正しい方向に私を向けることができれば助けになるでしょう。

+0

両方のアプリケーションのポートは何ですか? [トレースを実行する](http://stackoverflow.com/a/9897291/151445)、またはポートの予約を確認しましたか? [tcpview](http://technet.microsoft.com/en-us/sysinternals/bb897437)を実行して、両方のアプリケーションのtcp接続を監視することもできます。 –

+0

両方のアプリケーションに使用されるポートは、デフォルトのnet.tcpポート808です。接続を監視するためにtcpviewアプリケーションを試します。 – Diego

+0

デフォルトでは、Windowsはポート共有を有効にしません。私はあなたが正しく有効になっていることを確認します([ここをクリック](http://msdn.microsoft.com/en-us/library/ms734772.aspx))。可能であれば、1つのアプリケーションのポートを変更したり、VM内のポートをテストしたりすることもできます。 –

答えて

1

デフォルトでは、Windowsはポート共有を有効にしません。私はそれが正しく有効になっていることを確認します(see here)。

可能であれば、1つのアプリケーションのポートを変更するか、VM内のポートをテストすることもできます。

また、同じ問題が発生する可能性がある他の人は、Diegoが行ったようにして、設定でポート共有が有効になっていることを確認してください。結合にportSharingEnabled="true"を追加しますから撮影

<system.serviceModel> 
    <bindings> 
    <netTcpBinding name="portSharingBinding" 
        portSharingEnabled="true" /> 
    <services> 
    <service name="MyService"> 
     <endpoint address="net.tcp://localhost/MyService" 
        binding="netTcpBinding" 
        contract="IMyService" 
        bindingConfiguration="portSharingBinding" /> 
    </service> 
    </services> 
</system.serviceModel> 

http://msdn.microsoft.com/en-us/library/ms731810.aspx

関連する問題