Я делаю 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 и обработать все самому?