【问题标题】:WCF CallBack Object logicWCF 回调对象逻辑
【发布时间】:2015-02-10 16:36:35
【问题描述】:

在我正在处理的 wcf 双工项目中,使用以下 3 行创建和打开代理:

InstanceContext context = new InstanceContext(new MyCallbackObjectImplementingCallbackContract());

_proxy = new ServiceClient(context);

_proxy.Open();

我有几个问题:

  1. 假设我的回调合同只有 3 个方法(操作合同),在我的回调类上,除了实现这 3 个方法之外,我还有 10 个方法。 我在服务器端调试时发现 OperationContext.Current.GetCallbackChannel<IMyCallbackContract>() 被调用 返回的对象只有具有“OperationContract”属性的方法,而不是整个对象。幕后有什么魔力。另外,在回调类上有一堆额外的(不是合约实现)方法是不是一个糟糕的设计,如果是这样,它可能会产生什么影响?
  2. _proxy.open() 元数据表示对象从创建状态转换为打开状态。我不太明白这意味着什么?

【问题讨论】:

    标签: c# wcf duplex


    【解决方案1】:

    问题 #1:是的,WCF 只查找标有 OperationContract 属性的方法。它使用旧的远程处理RealProxy/TransparentProxy 机制创建代理。基本上,WCF 在契约接口中查找操作,而不是在实现该接口的类中。它还代理合约接口,而不是实现类。

    至于设计问题,这取决于。只要其他方法帮助操作方法履行合同,就没有问题。但是如果其他方法实现了不同的职责,那么听起来,这样的设计违反了单一职责原则。

    问题 #2:在 WCF 中,通道代理继承 CommunicationObject。该对象不是无状态的,它跟踪通道上的通信状态。此外,它可以在远程端进行会话,这是一种昂贵且有限的资源。由于这些原因,通信对象应该像数据库连接一样对待:打开它,执行操作,然后Close()Abort()。您可以在this MSDN topic找到更多详细信息。

    【讨论】:

      猜你喜欢
      • 2014-11-10
      • 2019-09-13
      • 1970-01-01
      • 2013-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      相关资源
      最近更新 更多