1

この素晴らしい記事に従って、 WCF を使用したチャットを分析して理解しています。ロジックは、ユーザーがチャットに参加すると、その特定のユーザー用にイベント ハンドラーが作成され、辞書に格納されるというものです。

        lock (syncObj)
        {
            if (!checkIfPersonExists(person.Name) && person != null)
            {
                this.person = person;
                chatters.Add(person, MyEventHandler);
                userAdded = true;
            }
        }

そのため、サービス内の複数のユーザーに対して複数のハンドラーが格納されます。

私の質問はこれです -

イベント ハンドラーの助けを借りてメッセージが送信されたときに、サービスはどのようにターゲット ユーザーを識別しますか? ユーザー用に保存されているイベント ハンドラーの一意性がわかりません。どうやって

handler.BeginInvoke(this, e, new AsyncCallback(EndAsync),
                    null);

その特定のユーザー向けに二重クライアント コントラクト インターフェイスを実装したクライアント側の関数を呼び出しますか? それらを接続するのはどれですか?セッション?

: この記事を読まずに理解するのは難しいかもしれません。一般的な方法で質問するように最善を尽くしました。

よろしく

NLV

4

1 に答える 1

1

サービスが pub/sub サービスでクライアントにどのように応答するかを尋ねていると思います。その場合、答えはOperationContext.Current.GetCallbackChannel<IYourServiceContract>()、クライアントが「サブスクライブ」したときに提供されるコールバックチャネルをサービスが使用することです。この callbackChannel を詳しく調べると、クライアントとの通信に必要なすべてのデータが保持されていることがわかります。リンクしたサンプル アプリケーションで、作成者が person オブジェクトからこれを取得していることに気付いた場合、b/c 彼はそれを chatters Array に格納したいと考えています。

callback = 
                 OperationContext.Current.GetCallbackChannel<IChatCallback>(); 

これは私が書いた記事で、pub/sub モデルを少し単純化するかもしれません。 http://www.codeproject.com/KB/WCF/wcfesb.aspx。これはチャット プログラムではありませんが、コールバック チャネルを介して通信がどのように行われるかについてもう少し説明できるかもしれません。

これがあなたの求めているものでない場合は...明確にしてください。

于 2010-07-19T17:12:46.040 に答える