多分私はWCFを不適切に実装していますが、多数の呼び出しを行った後にを使用しているときにWCF例外が発生しているようです。複数の呼び出しの後にWCFでTimeoutExceptionが発生する
ここは私がやっていることの高レベルです。基本的には、私はproc exeで作業していて、WCFという名前のパイプを使って前後に通信しています。私は、この属性を経由して私のホストが開いたまま:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,
ConcurrencyMode = ConcurrencyMode.Multiple)]
その後、私のクライアントで私は一度インスタンス化し、必要に応じて経由で使用static DuplexChannelFactory
作成:私はちょうどのPingメソッドを追加した
channelFactory.CreateChannel().MakeCall();
をホストが正常に動作していることを確認します(ホストは知らないうちに見逃したくないイベントを返送するため)。このPingメソッドは5秒ごとに1回実行され、単にtrueを返します。しかし、2,3分実行した後、私はTimeoutException
を取得します。ここに私の例外トレースは次のとおりです。
サーバースタックトレース: で System.ServiceModel.Channels.CommunicationObject.Open(TimeSpanの タイムアウト)で System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.OnOpen(TimeSpanの タイムアウト)で System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannelでSystem.ServiceModel.Channels.ServiceChannel.OnOpen(のTimeSpanタイムアウト)System.ServiceModel.Channels.CommunicationObject.Open(のTimeSpan タイムアウト)で
。 ICallOnce.Call(ServiceChannel チャネル、 System.ServiceModel.Channels.ServiceChannel.Callで System.ServiceModel.Channels.ServiceChannel.EnsureOpened(TimeSpanの タイムアウト)で System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(TimeSpanの タイムアウト、CallOnceManagerカスケード)でのTimeSpanタイムアウト) にSystem.ServiceModel.Channels.ServiceChannel.Call(String action、 ブール一行、ProxyOperationRuntime操作、Object [] ins、 オブジェクト[]アウト、TimeSpanタイムアウト)オブジェクト[]) にSystem.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall、ProxyOperationRuntime操作しかし、私はしませんconnection = this.connectionPoolHelper.EstablishConnection(timeout)
:) System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessageが メッセージ)
で私はJustDecompileを開いていて、このエラーはほとんどの場合、ここで起こっていることを確認します以前に数回pingしてからタイムアウトになる理由を見てください。この設定を無限にするために設定する必要があるのは、クライアントまたはサーバー側からこのWCFイベントサーバー(オンデマンド処理にも使用されます)を実装する別の方法ですか?
UPDATE
私はコール試行、ノーリターンを見始める前に、私は約6 pingを作ります。
_これまで何時間も働いた後にタイムアウトする理由はありませんか?_ - 実際には多くの意味があり、リソースリークとしてマークしています。あなたは何かを閉じたり/取り除いたりしていません。 –
@HenkHoltermanでも、サーバーやクライアントには何がありますか?私はCreateChannelを何回も呼び出さないのですか?たぶんCreateChannelとそれを何度も何度も使っていますか?私の推測では、クライアントをどこかに置いておくことです。なぜなら、サーバーを保持してクライアントを強制終了することができ、クライアントの再起動時に少しでも機能するからです。 –
うーん、6ピングは半分です。数分ではありません。 –