WCF管道连接中止并出现错误:从管道读取时出现错误:无法识别的错误109

问题描述:

我正在使用命名管道绑定来设计带回调的WCF服务。当我从客户端调用服务时,在服务器端跟踪它显示错误“从管道读取时发生错误:无法识别的错误109”,最终导致管道连接中止。但我完全不知道是什么导致了这个问题。跟踪不给出更多的信息,除了在堆栈跟踪:WCF管道连接中止并出现错误:从管道读取时出现错误:无法识别的错误109

System.ServiceModel.Channels.PipeConnection.OnAsyncReadComplete(Boolean haveResult, Int32 error, Int32 numBytes) 
System.Runtime.Fx.IOCompletionThunk.UnhandledExceptionFrame(UInt32 error, UInt32 bytesRead, NativeOverlapped* nativeOverlapped) 
System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP) 

和另一个109错误与堆栈跟踪

System.ServiceModel.Channels.PipeConnection.OnAsyncReadComplete(Boolean haveResult, Int32 error, Int32 numBytes) 

我怀疑它是与基于该操作的返回值追踪活动流动。但即使我将操作的返回类型声明为void,仍然会出现此错误。另一件事是虽然我使用回调,但它不会在操作中调用回调。

任何帮助将不胜感激,或指导我如何调试管道连接中止,我敢打赌有一些方法来获得更详细的信息。例如,如何捕捉上面提到的异常(在服务器操作中尝试catch块没有得到任何东西,客户端调用函数也没有)。

原来我在某个阶段没有调用client.Close()函数。所以当客户端程序退出时,通道被中止,服务器显示提到的错误

过大的邮件可能会导致此错误。你是否从客户端发送大量数据?

我想我也有它,当我发送枚举,但价值不是一个有效的枚举值。

还有一些非常有用的信息here关于追踪问题。

+0

感谢您的回复。我还了解到,过高的回复或枚举值可能会导致此问题。起初我返回一个枚举,但现在我改变它返回布尔(正如我所说我甚至改变了功能作为void,但仍然有这个问题)。另一件事是在你的链接上,它表示客户端得到了109错误,而在我的情况下,我把它在服务器上,没有任何其他有用的信息,比如他有什么,比如序列化错误。我相信这个失败的理由有一些例外,但我不知道该在哪里捕捉它。 – tete 2012-03-30 11:08:04