2010-01-05 54 views
2

有时,这将是一个SocketException:什么可能导致我的WCF抛出奇怪的Socket异常?

Stack trace: at System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) 
    at System.ServiceModel.Channels.SocketConnection.Write(Byte[] buffer, Int32 offset, Int32 size, Boolean immediate, TimeSpan timeout) 

有时则是抛出以下CommunicationObjectAbortedException:

Stack trace: at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) 
    at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) 

的行为是很随意的。它正在反对一般工作的静态调用。

+0

你与regina有关吗? – 2010-03-29 01:04:15

+0

@every_answer_gets_a_point Nope – 2010-03-29 02:03:45

回答

0

实现与其上的ServiceContract接口的类只实例化一次,并重用方法。这会导致多线程异常,这些异常不会传回给客户端,也不会记录在事件日志中。

1

什么错误?

如果是WSA错误(100053 WSAECONNABORTED,10054 WSAECONNRESET和朋友)之一,则表示底层IP堆栈已关闭套接字。如果是异步IO挂起中止995 ERROR_OPERATION_ABORTED,它表示发布异步I/O请求已退出且该请求已被操作系统中止的线程。

+0

我收到了995.关于如何追踪它的任何建议。 – 2010-01-05 18:49:49

+0

我真的不能帮忙,它取决于你的代码,还有许多WCF层。这个想法是找出为什么一个已经发起异步请求的线程已经存在。作为一般说明,永远不要启动显式线程并始终依赖于ThreadPool异步回调通常可行,因为ThreadPool已为I/O分散线程,并且如果它们具有挂起的I/O请求,则不会被剔除。 – 2010-01-05 18:58:19

+0

你的意思是调试WCF?我的应用程序没有使用多线程。这个调用虽然是从ASP.NET开始的。 – 2010-01-05 19:06:22

相关问题