5

.NET 4.5では、新しいWCFバインディングであるNetHttpBindingが導入されました。これは、基盤となるトランスポートとしてWebSocketプロトコルを使用します。これは、これがサーバーからの真のプッシュを可能にすることを意味します。これで、次のようなコールバックコントラクトを使用して、ある種のプッシュを行うことができました。

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]
public class WebSocketSampleService : IDuplexContract
{
    public string SayHelloDuplex()
    {
        //push to the current caller
        OperationContext.Current.
            GetCallbackChannel<IDuplexCallbackContract>().
            SayingHello("Hello from WebSockets");

        //answer the current caller in the regular http way
        return "Hello";
    }
}
[ServiceContract(CallbackContract=typeof(IDuplexCallbackContract))]
public interface IDuplexContract
{
    [OperationContract]
    string SayHelloDuplex(string name);
}
[ServiceContract]
public interface IDuplexCallbackContract
{
    [OperationContract]
    void SayingHello(string message);
}

ただし、私がやりたいのは、単一のクライアントがメソッドを呼び出したときに、すべてのクライアントにメッセージをブロードキャストすることSayHelloDuplex()です。すべてのクライアントのコールバックチャネルにアクセスする方法はありますか?または、後で他の方法(例Connect())で使用するために、すべてのクライアントのコールバックチャネルを記録する必要がありますか?おそらく私はこの問題に間違った方法で取り組んでいますか?

どんな助けでもありがたいです。ありがとう

4

1 に答える 1

4

コールバックチャネルはクライアントごとに一意であるため、すべてのクライアントのコールバックチャネルにアクセスする方法はありません。

代わりに、特定のクライアントをターゲットにできるように、各クライアントのコールバックチャネルをリストに保存するか、辞書に保存する必要があります。

次に、すべてのクライアントにメッセージをブロードキャストする場合は、リストに目を通します。

于 2013-09-20T12:33:56.383 に答える