我正在尝试创建一个可以发送和接收更新的客户端 - 服务器模型。我一直在阅读WCF来做这件事。但是,我不断遇到DuplexClientBase
/ DuplexChannelFactory
在构造点需要客户的问题。我正在寻找洞察我是否正确使用WCF以及如何更好地实现我的目标。
当您通过OperationContext.Current
获取客户端频道时,服务器端很容易。然而,由于需要客户端的频道,客户端无法直接获得频道......?因此,如果客户希望向服务器发送消息,则可以将其全部封装在DuplexClientBase
中。
试图澄清我的观点的代码:
[ServiceContract(CallbackContract = typeof(IClient))]
public interface IServer
{
// The server can get and manage a channel through
// OperationContext.Current.GetCallbackChannel<IClient>()
// This is perfect as the server can directly interact with
// the client
[OperationContract]
void Register();
[OperationContract]
void Greet();
}
public class ServerProxy : DuplexClientBase<IServer>
{
// In order for the client to recieve messages from the Server
// This class extends DuplexClientBase, however the constructors
// For DuplexClientBase require an instance context (A client)
public ServerProxy(Client client, Binding binding, EndpointAddress address)
: base(new InstanceContext(client), binding, address) {}
public void Register()
{
Channel.Register();
}
}
public class Client : IClient
{
// The client can now receive messages from the server but how is it
// meant to send messages to the server? So if the client wanted
// to "greet" the server it can't as that has to be done through
// "ServerProxy"
}
我可以看到两种方法可以解决这个问题,但我对WCF说不合适,无论两种方法是否合适。
服务器可以分为两个服务,一个没有回调合同。这将允许客户端扩展ClientBase
并至少访问服务器的某些功能。但是客户不能问候&#34;并且#34;注册&#34;由服务器。
为客户提供ServerProxy
?但循环性使我相信这不是一个好主意。