2016-04-28 9 views
0

weighbridgeに接続されているWCFサービスを開発中です。 体重が変更されたときに、接続されているすべてのクライアントにメッセージを送信したいと考えています。 weighbridgeは1つのクライアントにしか接続できないので、wsDualHttpBindingとコールバックによってクライアントと通信するWCFを開発しました。WCF wsDualHttpBindingコールバックの送信を停止する

このソリューションは機能しますが、長時間(1〜2日後)WCFサービスはコールバックの送信を停止します。 私はロガーを持っているので私のサービスが分かっていますが、クライアントはコールバックを受け取っていません。私のサービスも例外をスローしません。

それは私のサービスpseduoコードです

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant, InstanceContextMode = InstanceContextMode.PerSession)] 
public sealed class WeightbridgeService : IWeightbridgeService, IDisposable 


public WeightbridgeService() 
{ 
     this.callback = OperationContext.Current.GetCallbackChannel<IWeightbridgeServiceCallback>(); 
     weighbridge.WeightChanged += WeightChangedEventHandler; 
     timer.Elapsed += TimerOnElapsed; 
     timer.Start(); 
} 

private void TimerOnElapsed(object sender, ElapsedEventArgs elapsedEventArgs) 
{ 
      timer.Stop(); 
      this.callback.SendWeightData(this.weightData); 
      timer.Start(); 
} 

と設定

<bindings> 
     <wsDualHttpBinding> 
     <binding name="longTimeoutBinding" receiveTimeout="00:45:00" sendTimeout="00:45:00" openTimeout="00:45:00" closeTimeout="00:45:00" > 
      <reliableSession inactivityTimeout="00:45:00" /> 
      <security mode="None"/> 
     </binding> 
     </wsDualHttpBinding> 
    </bindings> 

あなたは私が間違ってやっている私を助けてもらえますか? 解決策が見つかりません。

答えて

0

SERVICE設定ファイルのバインディングにreceiveTimeout属性を追加できます。その名前はreceiveTimeoutですが、「非アクティブ」クライアントの接続を閉じるためにサーバーが使用する値(時間)です。

例:

<binding name="wsDualHttpBinding" 
      closeTimeout="00:01:00" 
      openTimeout="00:01:00" 
      receiveTimeout="02:00:00"> <-- this is the amount of time to wait before droppin client connection 
関連する問題