2012-03-29 60 views
0

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

回答

0

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

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

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

0

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

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

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

..而不是沿着线的东西:

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

..这得到了在摆脱所有的erors的WCF跟踪文件。

相关问题