Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF回调对象逻辑_C#_Wcf_Duplex - Fatal编程技术网

C# WCF回调对象逻辑

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个之外,我

在我正在处理的wcf duplex项目中,使用以下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中,通道代理继承通信对象。此对象不是无状态的,它跟踪通道上的通信状态。此外,它可以在远程端举行会话,这是一种昂贵且有限的资源。由于这些原因,通信对象应该像数据库连接一样对待:打开它,执行操作,然后关闭或中止。您可以在中找到更多详细信息