.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()
)で使用するために、すべてのクライアントのコールバックチャネルを記録する必要がありますか?おそらく私はこの問題に間違った方法で取り組んでいますか?
どんな助けでもありがたいです。ありがとう