我正在使用 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
}
这可能吗?在服务端使用自己的合同生成新课程的最佳实践是什么?还是我只需将所有内容捆绑到一个庞大的 MyService 类中并自己处理所有内容?