2012-03-20 14 views
0

はい、かなり無意味ですが、実際には少なくとも7秒間WCFサービスの応答を遅らせる必要があります。これは今ブロックされていると言われているSystem.Threading.Thread.Sleep()で行われます。したがって、ワーカースレッドを他の要求に利用できるようにするソリューションを探したいと思います。私もブロックしようとしたSystem.Timerを試しました。ワーカースレッドをブロックせずにWCFサービスの応答を遅らせる可能性はありますか?

私は、要求を送信する可能性を認識しており、クライアントに待機する時間を伝え、時間が経過した後に2回目の要求を実行します。しかし、それは、待っている時間を確認し、さまざまなデータを保存して再送信し、変更されていないことを検証する必要があります。私はこれが本当に必要かどうか最初に調査したいと思います。

+0

7秒後にトリガーするSystem.Threading.Timerにイベントをアタッチすることはオプションになりますか? – Gabber

+0

あなたのサービスはどのようにホストされていますか? – paramosh

+0

@Gabber:上記のように、私はこれを試してみました。これはブロックされているようです(別のスレッドを使って 'Timer'をホストしているため)。 – PrinceCharles

答えて

0

クライアントが同期コールを期待している限り、要求が処理されて応答が返されるまで、スレッドを保持し続けることになります。 IInstanceProviderのようなエキゾチックなハックを試みるか、必要な時間遅延を処理する操作動作を作成することができますが、結局はスレッドを保持しています。

+0

まあ、それは私の考えです。しかし、同期呼び出しを行う必要はありません。他の可能性はありますか? – PrinceCharles

+0

概念的には、解決策は、要求を受信時にキューに入れ、その後適切な時間が「成熟した」要求のみを実行する要求ハンドラを作成することです。 WCF非同期配管内でノンブロッキング要求スケジューラを作成したり、それを活用することが可能かどうかはわかりません。時間遅延を処理するためにクライアントからの複数の要求を管理することは、WCFを使用してサービス側のソリューションを試すよりも簡単な問題です:) –

+0

あなたはおそらく正しいでしょう! THX!ちょうど私がそのような問題を解決することを認識していないいくつかのプログラムの構成があるかもしれないと思った。 – PrinceCharles

0

私は問題を正しく理解していませんが、サービスをブロックする必要はなく、複数のクライアントが同時にサービスにアクセスできるようにしたいと思います。

サービスの並行性の設定は何ですか?このテーマの詳細についてはthis articleまたはMSDN articleをご覧ください。

+0

私は提供されたリンクを調べなければならないでしょう。これはしばらく時間がかかることがあります... – PrinceCharles

+0

これはサービス側の問題の解決策ですが、私はまだあなたがThread.Sleep()を呼び出しているかどうかはわかりませんが、クライアントまたはサービスをブロックしていますか?どのように今サービスをインスタンス化していますか?もう少し情報があれば、より効率的にお手伝いできるでしょう。 –

+0

WCFサービスは、Webページ上でJavaScript(非同期で動作)から呼び出されます。 'Thread.Sleep()'はWCFサービスで呼び出され、(実際の生活との相関によって)レスポンスを遅らせるため、基本的にJavaScriptの終了は約7秒後に結果を受け取ります。 – PrinceCharles

0

古い質問が、誰かがそのような(奇妙な)可能性を必要とするならば...私として

、それはサービスクラスの属性

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, 
       ConcurrencyMode = ConcurrencyMode.Multiple)] 

と連携し、

Thread.Sleep(10000); 

メソッドの復帰前。

関連する問題