双工客户端服务器交互

时间:2015-12-08 13:41:39

标签: c# wcf

我正在尝试创建一个可以发送和接收更新的客户端 - 服务器模型。我一直在阅读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说不合适,无论两种方法是否合适。

  1. 服务器可以分为两个服务,一个没有回调合同。这将允许客户端扩展ClientBase并至少访问服务器的某些功能。但是客户不能问候&#34;并且#34;注册&#34;由服务器。

  2. 为客户提供ServerProxy?但循环性使我相信这不是一个好主意。

0 个答案:

没有答案