我遇到了关闭回调/双工通信通道的问题/疑问。以下是我的典型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关闭回调接口却导致一分钟阻塞操作。
在客户端关闭的做法,我认为是不正确的,因为客户端不知道是否有更多的回调要接收。
谢谢任何帮助。 Frank
P.S .: 这似乎是一个非常基本的问题,但到目前为止,当我通过谷歌或stackoverflow搜索时,没有找到有用的信息......