Я создаю службу WCF с netTcpBinding, в которой есть главное лобби с несколькими чатами, в которые могут войти клиенты. Класс 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
}
Это возможно? Как лучше всего создавать новые классы с собственными контрактами на стороне службы? Или мне просто нужно объединить все в один массивный класс MyService и обрабатывать все самому?