【发布时间】:2012-01-19 12:26:40
【问题描述】:
我在关闭回调/双工通信通道时遇到问题/疑问。 这是我的原型 WCF 接口:
[ServiceContract(CallbackContract = typeof(IMyInterfaceCallback))]
public interface IMyInterface
{
[OperationContract]
void StartWork();
}
public interface IMyInterfaceCallback
{
[OperationContract(IsOneWay = true)]
void WorkFeedback();
}
在客户端,我通过以下方式创建 WCF 接口:
DuplexChannelFactory<IMyInterface> dcf = new DuplexChannelFactory<IMyInterface>(implOfIMyInterfaceCallback, customBinding, ea);
IMyInterface myInterface = dcf.CreateChannel();
然后我在服务器端使用
OperationContext.Current.GetCallbackChannel<IMyInterfaceCallback>();
检索回调指针,然后可用于与客户端通信。
我现在的问题是:
- 谁应该关闭通讯渠道?客户端或服务器
- 哪些通信对象需要关闭?原始接口 (IMyInterface) 或回调接口 (IMyInterfaceCallback) 或两者兼有。
我试图关闭服务器端的回调接口,在服务器知道它不会再做回调的时候。 然而,在回调接口上使用 ICommunicationObject::Close 会导致一分钟的阻塞操作。
在我看来,在客户端关闭不是正确的方式,因为客户端不知道是否有更多的回调可以预期。
感谢您的帮助。 弗兰克
附: 这似乎是一个非常基本的问题,但到目前为止,我在通过 google 或 stackoverflow 搜索时没有发现任何有用的信息......
【问题讨论】:
标签: wcf