WCF CallBack对象逻辑

时间:2015-02-10 16:36:35

标签: c# wcf duplex

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

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

_proxy = new ServiceClient(context);

_proxy.Open();

我在这里有几个问题:

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

1 个答案:

答案 0 :(得分:0)

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

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

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