クライアントが入ることができる複数のチャットルームを備えたメインロビーを持つnetTcpBindingを使用してWCFサービスを作成しています。Lobbyクラスは、サービスコントラクトとしてILobbyを実装します。
クライアントが部屋に入ることを望むとき、私はクライアントにコールバックして、彼がちょうど入った部屋のInstanceContextを含む新しいチャネルを公開したいのですが、多くの検索の後、これが可能かどうか疑問です。
たとえば、サービス側では
class Lobby : ILobby
{
Dictionary<string, Chatroom> rooms;
public void JoinRoom(string roomname)
{
if (rooms[roomname].TryEnter()) {}
}
}
class ChatRoom : IChatRoom
{
public bool TryEnter(string username)
{
ILobbyCallback callback =
OperationContext.Current.GetCallbackChannel<ILobbyCallback>();
// How do I do this next bit?
callback.JoinedRoom(pass some instance context here);
return true;
}
}
クライアント側のコールバックメソッドが欲しい
public void JoinedRoom(InstanceContext for the room on the service side)
{
// Create a new WCF proxy using above InstanceContext
// Create a WPF UI for the new room passing the proxy so it can communicate
// with the room class directly without going via the root service
}
これは可能ですか?サービス側で独自のコントラクトを持つ新しいクラスを生成するためのベストプラクティスは何ですか?または、すべてを1つの大規模なMyServiceクラスにバンドルして、すべてを自分で処理する必要がありますか?