2010-01-05 2 views
2

때로는 SocketException이 될 것입니다 :WCF에서 이상한 소켓 예외가 발생할 수있는 원인은 무엇입니까?

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

당신은 레지나와 관련이 있습니까? –

+0

@every_answer_gets_a_point Nope –

답변

0

ServiceContract를 사용하여 인터페이스를 구현하는 클래스는 한 번만 인스턴스화되며 메소드가 다시 사용됩니다. 이로 인해 클라이언트로 다시 전달되지 않고 이벤트 로그에 기록되지 않는 다중 스레딩 예외가 발생합니다.

1

어떤 오류입니까?

WSA 오류 (100053 WSAECONNABORTED, 10054 WSAECONNRESET 및 친구들) 중 하나가 기본 IP 스택이 소켓을 폐쇄했다는 것을 의미합니다. if async IO pending abort가 995 ERROR_OPERATION_ABORTED이면 비동기 I/O 요청을 게시 한 스레드가 종료되었으며 요청이 OS에 의해 중단되었음을 의미합니다.

+0

나는 995를 얻는다. 그것을 추적하는 방법에 대한 제안. –

+0

나는 정말로 도움이되지 않는다. 그것은 당신의 코드에 달려 있으며, 그 사이에 WCF의 많은 레이어들이있다. 생각은 비동기 요청을 시작한 스레드가 있었던 이유를 파악하는 것입니다. 일반적으로 명시 적 스레드를 시작하지 않고 항상 ThreadPool 비동기 콜백에 의존하는 것은 일반적으로 작동합니다. ThreadPool에 I/O 용 스파 스 스레드가 있고 보류중인 I/O 요청이있는 경우 해당 스레드가 제거되지 않기 때문입니다. –

+0

디버그 WCF를 의미합니까? 내 응용 프로그램에서 멀티 스레딩을 사용하지 않습니다. 호출은 ASP.NET에서 벗어나고 있습니다. –

관련 문제