2010-01-05 27 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

相關問題