由于错误#109,WCF管道连接中止

时间:2012-03-29 17:45:36

标签: wcf callback netnamedpipebinding

我正在设计一个使用命名管道进行回调的WCF服务和客户端,当服务器处理来自客户端的请求时,我收到错误#109并最终导致管道连接中止。以下是服务器端的跟踪文件。如果字体太小而无法看到,我应该简单解释一下:

当从客户端向服务器发出请求时,发生红色标记的三个异常。该函数非常简单,将一个字符串变量传递给服务器。此错误是#109(3个连续异常,如果该数字表示任何内容)并且它不提供更多信息。在此活动中,管道连接最终中止。还有什么奇怪的是我们可以在“接收连接上的字节...”,“处理消息”之后看到下一个活动,它实际上已经通过,这意味着服务器端处理确实被传递的参数调用。这可以在调试器中验证,因为在服务器端操作确实得到了传递字符串。如果我尝试

,也在操作功能内部
Dim callback = OperationContext.Current.GetCallbackChannel(Of ISSLServiceCallback)()
If DirectCast(callback, ICommunicationObject).State = CommunicationState.Opened Then 
   DoSomething()
End If

它实际上进入了If语句,我猜这意味着到目前为止该频道实际存在。

感谢您的帮助!

Tracing details

2 个答案:

答案 0 :(得分:0)

此异常表示服务器端WCF通道堆栈遇到操作系统错误ERROR_BROKEN_PIPE 109 (0x6D) The pipe has been ended。这表明当服务写入响应或与回调通道交互时,您的客户端可能已经断开连接。

我知道NetnamedPipeBinding中ERROR_BROKEN_PIPE的一个原因是客户端和服务器各自绑定配置之间安全期望不匹配的某种模式 - 我建议您检查安全配置是否一致。

如果您需要更多帮助,请发布您的客户端和服务代码,端点配置和堆栈跟踪以及您在日志跟踪中看到的每个异常的其他详细信息。

答案 1 :(得分:0)

我知道这是一个旧线程,但我遇到了完全相同的问题。

原来客户端代理正在关闭:

client.Abort();
client.Close();

..而不是一句话:

try
{
    client.Close();
}
catch (Exception ex)
{
    client.Abort();
}

..摆脱了WCF跟踪文件中的所有错误。