2017-09-18 8 views
0

から終了する私がタイトルで言うように、クライアントアプリケーションをオフにすると、そのサービス(クライアントアプリケーションと共に開始する)をどのように終了できますか?私は_serviceClient.CloseAsync()を呼び出そうとしますが、IIS Expressにはまだサービスがあります。それで、私たちはそれを行う方法がありますか?IIS ExpressのWCFサービスをコード

更新: 私のサービスはカメラを処理し、クライアント側に画像をストリームします。したがって、サービスを終了しないと、IISから手動でオフにするまでカメラが保持されます。だから私は一緒に二面を消したい。

私は、アプリケーションからクローズアクションでリリースカメラ機能を処理しました。予期せぬことが起こると、コードが実行されないようにアプリがクラッシュします。

+1

クライアントとサービスは2つの異なるものです。クライアントからサービスをシャットダウンできませんか?何も実行されておらず、リクエストを受け取っていない場合、クライアントからサービスをどのように起動しますか?実際の要件は何ですか?なぜあなたのサービスにこの機能を持たせたいのですか? –

+0

IISでアイドルタイムアウトを設定すると、アイドル状態のサービスが長時間停止することがあります。クライアントに到達しようとすると自動的に再開されます。クライアントはサービスをシャットダウンできません。 – Fildor

+1

更新後:サービスシャットダウンでこれを行うのは間違った方法です。 a)クライアントが積極的にストリーミングを停止できるようにAPIを作成します。 b)誰かがストリームを実際に聞いている場合はサーバで検出し、そうでない場合はストリームを停止します。たとえば、 "デッドマン"スイッチを使用することができます。私。クライアントはストリームを有効に保つためにハートビートを送信する必要があります。 – Fildor

答えて

1

ほとんどの場合、この問題は、送信者がリスナーの終了を認識していない場合に発生します。たとえば、UDPストリーミングで。

解決策の1つは、リスナーに「ハートビート」メッセージを送信して、それがまだ存在し、一定の間隔で聞いていることを示すことです。ハートビートがそれ以上受信されない場合、サーバーはクライアントが何らかの理由で解放されたリソース(ストリームを停止し、カメラを解放する)のためにこれ以上リッスンしないと結論づけることができます。

UDPは信頼できないので、単一のハートビートが欠落する可能性があることに注意してください。ハートビート周波数と「欠けているビート」の完全な構成が、あなたとネットワークにどのように作用するかを見なければなりません。

一般的なパターンは、受信したパッケージを示すためにクライアントに "確認応答"メッセージを送信する必要があるプロトコルを実装することです(ストリームのUDPパッケージも再送信する必要があるため)。

+0

WCFサービスでHTTPプロトコルを使用しています。だから、あなたが言及したパターンについてのより多くの情報を私に与えることができますか? –

関連する問題