2011-08-13 33 views
6

WCF TCP接続は永続的ではないようです。最初のping応答にはしばらく時間がかかりますが、それ以降のプロセスには時間がかかりません。しばらくするともう一度もう一度やり直しますか?永続的なTCP接続の作成/シミュレート方法は?

SERVER> Started on net.tcp://0.0.0.0:999

CLIENT> Connection created to net.tcp://localhost:999 //Not a real connection, ready to connect

CLIENT> Ping reply in 1s163ms //First connection

CLIENT> Ping reply in 22ms //Already connected

CLIENT> Ping reply in 26ms

CLIENT> Ping reply in 24ms

CLIENT> Ping reply in 325ms //Re-connected

CLIENT> Ping reply in 19ms

CLIENT> Ping reply in 767ms //Re-connected

trueの場合、接続が切断される前にtcp接続のアイドル時間値はどのくらいですか?私は接続を生かしておく必要があります。コード修正

更新:私は、サーバー側のみを変更し、それがエラーの原因となった更新

The action http://tempuri.org/IService/Pong is not supported by this endpoint. Only WS-ReliableMessaging February 2005 messages are processed by this endpoint.

NetTcpBinding tcpBind = new NetTcpBinding(); 
tcpBind.ReliableSession.Enabled = true; 
tcpBind.ReliableSession.Ordered = true; 
tcpBind.ReliableSession.InactivityTimeout = TimeSpan.FromMinutes(10); 

ServiceHost svh = new ServiceHost(typeof(ServiceImplementation)); 
svh.AddServiceEndpoint(
    typeof(WCFSimple.Contract.IService), 
    //new NetTcpBinding(), 
    tcpBind, 
    String.Format("net.tcp://{0}:{1}", ip, port)); 
svh.Open(); 

は今、私は別のエラーを得ました。次に、クライアント側のTCPを信頼性の高いメッセージングとして変更しました。

+0

現実世界のテスト:3秒間隔でping応答は約100msです。間隔が60sの場合、返信は〜500msプラス1s520ms(再接続可能) –

+0

私はそのタイムアウトを有効にする必要があると思う:reliableSession> enable = true; inactivityTimeout = 10秒; –

答えて

1

私はPingがTCP接続をテストするのに良いツールだとは思わない。 PingはTCPの代わりにその基礎となるプロトコルとしてICMPを使用するためです。

WCFクライアントを作成し、サービスに接続し、ネットワークスニファリングツールを使用してTCP接続を確認するか、クイックチェックにnetstatを使用することをお勧めします。

+1

これはICMPではなく、スタンダードのWCFサービスです。名前はPingだけです。クライアントは時刻を返し、サーバーは値を返します。 –

1

通常、WCF接続は一時的ですが、バックグラウンドで接続プーリングが行われます。

トランスポートとしてnet.tcpを使用すると、永続的(長期的)接続が可能です。あなたが投稿したコードはそれを達成する一つの方法です。

より多くの情報、およびいくつかの選択肢については、2006年10月。また、使用の

からWhat You Need To Know About One-Way Calls, Callbacks, And Events、MSDNマガジンの記事をチェックアウトはOperationContract属性で利用可能IsInitiatingIsTerminatingプロパティです。

関連する問題