C# WCF回调对象逻辑
在我正在处理的wcf duplex项目中,使用以下3行创建并打开代理:C# WCF回调对象逻辑,c#,wcf,duplex,C#,Wcf,Duplex,在我正在处理的wcf duplex项目中,使用以下3行创建并打开代理: InstanceContext context = new InstanceContext(new MyCallbackObjectImplementingCallbackContract()); _proxy = new ServiceClient(context); _proxy.Open(); 我这里有几个问题: 假设我的回调契约只有3个methodsoperation契约,在我的回调类上,除了实现这3个之外,我
InstanceContext context = new InstanceContext(new MyCallbackObjectImplementingCallbackContract());
_proxy = new ServiceClient(context);
_proxy.Open();
我这里有几个问题:
假设我的回调契约只有3个methodsoperation契约,在我的回调类上,除了实现这3个之外,我还有10个方法。
我在服务器端调试时发现
调用OperationContext.Current.GetCallbackChannel
返回的对象只有属性为“OperationContract”的方法,而不是整个对象。幕后的魔力是什么。另外,在回调类上有一堆extranotcontract实现方法不是一个糟糕的设计吗?如果是这样的话,它可能会有什么影响?
_proxy.open元数据表示要从已创建状态转换到已打开状态的对象。我不太明白那是什么意思?
问题1:是的,WCF只查找标有OperationContract属性的方法。它使用旧的Remoting RealProxy/TransparentProxy机制创建代理。基本上,WCF在契约接口中查找操作,而不是在实现该接口的类中。它还代理契约接口,而不是实现类 至于设计问题,这要视情况而定。只要其他方法有助于操作方法履行合同,就没有问题。但是如果其他方法实现了不同的责任,那么听起来,这样的设计违反了单一责任原则 问题2:在WCF中,通道代理继承通信对象。此对象不是无状态的,它跟踪通道上的通信状态。此外,它可以在远程端举行会话,这是一种昂贵且有限的资源。由于这些原因,通信对象应该像数据库连接一样对待:打开它,执行操作,然后关闭或中止。您可以在中找到更多详细信息