背景 私はカスタム ライブラリ (まだ公開されていませんが、すぐに) を使用して jQuery の JavaScript クライアントに長いポーリング ハンドラーを提供する ASP.net アプリケーションを作成しています。クライアントはハンドラーを呼び出し、ハンドラーが何らかのデータを返すまで待ち、それを表示してから、もう一度ハンドラーをヒットします... 洗浄、すすぎ、繰り返します。
ハンドラーの仕事は、リクエストを受け取り、それをコレクション (通常はList<>
) に入れ、データを含むイベントを待って、待機中のリクエストに返すことです。サーバーの静的クラス内の単純なイベントを使用してこれをテストしましたが、これはすべて正常に機能します。
問題 サーバー上のすべての AppDomains で、すべてのクライアントがメッセージを受信できるようにするために、単純な C# コンソール アプリを作成しました。これはバックグラウンドで実行され、WCF (NamedPipe) を介して DataContract を提供します。次に、WCF インターフェイスを介してコンソール アプリと通信できるクライアント オブジェクトを ASP.net に作成しました。
メッセージをキャッシュに同期的にプル/プッシュできます-これは正常に機能しています。ただし、WCF コントラクトで非同期パターンを使用しようとすると、EndMethod
要求する前に、IAsyncResult を BeginMethod に返した直後に起動されます。
何が悪いのかわかりません.Googleには弱い例を示すリソースがたくさんありますが、役に立ちません.
私が望むの は、とにかくデータ コントラクトを介して WCF 経由でイベントにバインドすることですか? そうすれば、イベントにアタッチするだけで完了できます。キャッシュへの新しいメッセージによってイベントがトリガーされ、非同期ハンドラーがトリガーされて、待機中のすべてのリクエストが返されます。
これは可能ですか?もしそうなら、誰かがサンプル/チュートリアル/例を持っていますか?
従うべきコード...