关闭收听频道的正确方法是什么?

时间:2018-02-19 04:44:17

标签: c# .net wcf channel

我正在使用命名管道作为传输为WCF编写自定义通道实现。我知道WCF有命名管道支持,但我有一个非常特殊的要求来编写自定义通道。我在网上找到了一些信息,其中一些例子是传输文件或UDP,并且在付出相当大的努力之后,实现几乎完成了。

最后我还想了解听音频道应该关闭的地方?是应该由WCF完成还是我必须这样做?我虽然是WCF的责任。在所有框架在我的通道监听器实现上调用AcceptChannel之后,我创建了一个通道实例,并将其返回给WCF。现在WCF拥有该对象,我认为它应该在不再需要时关闭它。

在WCF收到我的通道实例后,它调用TryReceiveRequest,在该方法中,我使用命名管道等待读取字节。在客户端处理客户端通道的某个时刻,我在等待读取字节时得到EndOfStreamException异常。然后,如果我从TryReceiveRequest返回null RequestContext对象,WCF会打破它调用TryReceiveRequest的循环,这就是它。我想在那之后WCF应该在该通道对象上调用Close但是没有,它不会这样做。当然,我可以在EndOfStreamException catch中调用Close,但感觉不对。如果WCF收到了一个通道对象的实例,WCF应该调用Close,对吧?我做错了什么以及如何打电话关闭?我是否需要告诉WCF客户端是否已断开通信并且是时候关闭频道了?

0 个答案:

没有答案