2013-06-11 6 views
0

Я делаю снимок в темноте с этим, но у меня возникла проблема, что я надеюсь, что кто-то может столкнуться раньше ... Мой клиент делает вызов сервера, который в значительной степени просто захватывает данные из SQL-сервера Sql и возвращает его моему клиенту, однако иногда клиент никогда не получает ответа от сервера. Я положил кучу входа в систему, и последняя строка кода на стороне сервера выполнена, но все же клиент никогда не получает ответ и, как результат, застревает «ОБРАБОТКА» ... Я добавил трассировку WCF и проверил ее с помощью службы Trace Viewer.Исключение связи WCF во время вызова сервера

WCF Activity Trace

И я вижу исключения в журналах активности, которые содержат следующий текст:

<E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent"> 
    <System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system"> 
    <EventID>131075</EventID> 
    <Type>3</Type> 
    <SubType Name="Error">0</SubType> 
    <Level>2</Level> 
    <TimeCreated SystemTime="2013-06-11T19:38:52.8094768Z" /> 
    <Source Name="System.ServiceModel" /> 
    <Correlation ActivityID="{a3b3598e-8ce1-4afc-8cf2-89c6fa505061}" /> 
    <Execution ProcessName="TwoFour.WCF.App" ProcessID="5056" ThreadID="111" /> 
    <Channel /> 
    <Computer>VA3WEB-REMEDY01</Computer> 
    </System> 
    <ApplicationData> 
    <TraceData> 
    <DataItem> 
    <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Error"> 
    <TraceIdentifier>http://msdn.microsoft.com/en-US/library/System.ServiceModel.Diagnostics.ThrowingException.aspx</TraceIdentifier> 
    <Description>Throwing an exception.</Description> 
    <AppDomain>TwoFour.WCF.App.exe</AppDomain> 
    <Exception> 
    <ExceptionType>System.ServiceModel.CommunicationException, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType> 
    <Message>The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '10675199.02:48:05.4775807'.</Message> 
    <StackTrace> 
    at System.ServiceModel.Channels.SocketConnection.EndRead() 
    at System.ServiceModel.Channels.TracingConnection.EndRead() 
    at System.ServiceModel.Channels.SessionConnectionReader.OnAsyncReadComplete(Object state) 
    at System.ServiceModel.Channels.TracingConnection.TracingConnectionState.ExecuteCallback() 
    at System.ServiceModel.Channels.SocketConnection.AsyncReadCallback(Boolean haveResult, Int32 error, Int32 bytesRead) 
    at System.Runtime.Fx.IOCompletionThunk.UnhandledExceptionFrame(UInt32 error, UInt32 bytesRead, NativeOverlapped* nativeOverlapped) 
    at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP) 
    </StackTrace> 
    <ExceptionString>System.ServiceModel.CommunicationException: The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '10675199.02:48:05.4775807'. ---&gt; System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host 
     --- End of inner exception stack trace ---</ExceptionString> 
    <InnerException> 
    <ExceptionType>System.Net.Sockets.SocketException, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType> 
    <Message>An existing connection was forcibly closed by the remote host</Message> 
    <StackTrace> 
    at System.ServiceModel.Channels.SocketConnection.EndRead() 
    at System.ServiceModel.Channels.TracingConnection.EndRead() 
    at System.ServiceModel.Channels.SessionConnectionReader.OnAsyncReadComplete(Object state) 
    at System.ServiceModel.Channels.TracingConnection.TracingConnectionState.ExecuteCallback() 
    at System.ServiceModel.Channels.SocketConnection.AsyncReadCallback(Boolean haveResult, Int32 error, Int32 bytesRead) 
    at System.Runtime.Fx.IOCompletionThunk.UnhandledExceptionFrame(UInt32 error, UInt32 bytesRead, NativeOverlapped* nativeOverlapped) 
    at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP) 
    </StackTrace> 
    <ExceptionString>System.Net.Sockets.SocketException (0x80004005): An existing connection was forcibly closed by the remote host</ExceptionString> 
    <NativeErrorCode>2746</NativeErrorCode> 
    </InnerException> 
    </Exception> 
    </TraceRecord> 
    </DataItem> 
    </TraceData>  
</ApplicationData> 

Я не думаю, что кто-то видел что-то подобное раньше и может дайте мне несколько рекомендаций относительно того, как я могу это исправить? Любая информация будет глубоко цениться.

Спасибо!

+0

У сборщика, содержащего контракт на обслуживание, есть сильное имя? (другими словами ... он подписан?) – DarkSquirrel42

+0

Кажется, что ваше соединение отключается. Может быть, ваша проблема похожа на эту проблему. Http://www.stackoverflow.com/questions/11946117/wcf-inactivity-timeout – dsfgsho

ответ

3

A CommunicationException с сообщением об ошибке типа «Соединение сокета было прервано. Это может быть ...» является всего лишь общим условием отказа и является побочным эффектом фактической ошибки.

Чтобы узнать, что такое ошибка, используйте вывод трассировки WCF. Выберите элементы, отмеченные как Exceptions, и посмотрите на панель сведений для них. Один из них, скорее всего, даст вам более ясную информацию об ошибке, которая действительно может быть чем-то из того, что вы предоставили до сих пор.

Установите трассировку как на клиентском, так и на сервере, а когда вы увидите исключение в окне трассировки, выделите его, чтобы показать более подробные сведения в правых панелях.

+0

Во втором случае у меня было много таких проблем при использовании EF для гидратации pocos. Иногда это была круговая ссылка, иногда это была ценность, которую она не могла сериализовать. используя Wcf tracer, вы можете вникнуть в кишки, чтобы увидеть, что вызвало это. – Slicksim

+0

Спасибо, что нашли время ответить на мой вопрос. Извините, я новичок в этом процессе. У меня есть файл трассировки, и я использую Service Trace Viewer для анализа его содержимого. Я вижу исключения в трассировке, но, похоже, есть 2 исключения как с этим общим сообщением. Как я могу получить более конкретную ошибку? Мне нужно изменить настройки трассировки? –

+0

http://msdn.microsoft.com/en-us/library/ms732023.aspx –

Смежные вопросы