4

Windows サービスでホストされている WCF サービスがあります。

WCF サービスにはConcurrentQueue<SomeClass>.

Windows サービス (WCF サービスをホストする) にもConcurrentQueue<SomeClass>.

Windows サービスは WCF サービスを開始し、ワーカー スレッドも生成します。

Enqueueワーカー スレッドは、 の ( ) オブジェクトをにプッシュSomeClassConccurrentQueueます。

オブジェクトがキューに入れられたときに WCF サービスがトリガーされ、ConcurrentQueueそれ (およびキューにある可能性のある他のオブジェクト) をデキューし、接続されているすべてのクライアントにメッセージを送信できるようにしたいと考えています。

.

2 つの質問:

  1. 注入された ConccurentQueue の「Enqueue」メソッドで WCF サービスを「フック」して、オブジェクトがキューにプッシュされたときに WCF サービスが何かを行うようにするにはどうすればよいですか?

  2. なんとかして「エンキュー」イベントをフックし、Windows サービスのワーカー スレッドが2 つのオブジェクトをキューにエンキューした場合、つまり、WCF サービスの「エンキュー フック」も 2 回「トリガー」することになります。トリガーされた 2 つのイベントが異なるスレッドで発生しますか? どういうわけか、WCF サービスがキューからオブジェクトを順番にプルするようにする必要があります。エンキュー操作ごとに突然それを見たくありません-WCFサービスは別のスレッドでトリガーされ、オブジェクトを引き出します...

私の質問が十分に明確であることを願っています...

.

[アップデート]

Chris と話し合った結果、WCF サービスからワーカー スレッドを分離し、ワーカー スレッドがクライアントとして WCF サービスを呼び出せるようにするのが最善の方法であるという結論に達しました。これは、キューをいじる必要がないことを意味します。

4

1 に答える 1

5

Enqueue および Dequeue 呼び出しを公開する単純なクラスで ConcurrentQueue をラップし、このクラス内にフックを配置します。YourClass.Enqueue が呼び出されるたびに、YourClass.Dequeue を呼び出すことができる WCF アクティビティをトリガーします。YourClass.Dequeue はキューを排出し、WCF サービスが順番に処理できる順序付けられた列挙型に配置します。

于 2012-07-03T19:36:56.937 に答える