2010-02-19 1 views
4

Я знаю, что подобный вопрос можно было задать много раз, но я хочу представить поведение, которое я вижу, и найти, может ли кто-нибудь помочь предсказать причину этого.Как найти причину и SocketException с сообщением о том, что установленное соединение было прервано программным обеспечением на вашей главной машине?

Я пишу службу Windows, которая подключается к другим службам Windows через TCP. На данный момент существует 100 пользовательских объектов и 5 соединений на каждый. Эти пользователи выполняют свои задачи, используя свои индивидуальные подключения.

Приложение может не видеть эту проблему в течение 1 или 2 дней. Или иногда показывайте проблему сразу после запуска (-rarely). Лучший пробег у меня был, как 4-5 дней, не показывая это исключение. И после этого заявление умерло, или мне пришлось остановить его по разным причинам.

Я хочу знать, что может быть причиной этого? Вот стоп-трасса.

System.IO.IOException: Unable to write data to the transport connection: An established connection was aborted by the software in your host machine. ---> System.Net.Sockets.SocketException: An established connection was aborted by the software in your host machine at System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) at System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size) --- End of inner exception stack trace --- at System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size) at System.Net.Security._SslStream.StartWriting(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest) at System.Net.Security._SslStream.ProcessWrite(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslStream.Write(Byte[] buffer, Int32 offset, Int32 count)

+0

@cdpnet: Это во внутренней сети, защищенной от вредоносных намерений? Я лично не испытывал этого * еще *, но я предполагаю, что была сделана попытка подключиться к вашему сокету, которого не должно быть. – IAbstract

+0

Это внутренняя сеть компании, работающая на наших настольных компьютерах. – cdpnet

+0

какой-то фактический код будет приятным. Вы создаете соединения сокета программным путем через собственный код? Я был там – leon

ответ

3

Вы нашли решение этой проблемы? Возможно, вы сможете приблизиться к решению, если добавить сетевой трассировку в свой app.config?

<?xml version="1.0"?> 
<configuration> 
    <system.diagnostics> 
     <sources> 
      <source name="System.Net.Sockets"> 
       <listeners> 
        <add name="Sockets"/> 
       </listeners> 
      </source> 
     </sources> 
     <switches> 
      <add name="System.Net.Sockets" value="31"/> 
     </switches> 
     <sharedListeners> 
      <add name="Sockets" type="System.Diagnostics.TextWriterTraceListener" initializeData="c:\socketdump.log"/> 
     </sharedListeners> 
     <trace autoflush="true"/> 
    </system.diagnostics> 
</configuration> 

Кроме того, возможно, вы можете настроить ведение журнала для TLS/SSL. Добавьте следующий параметр DWORD и установите его на 7, в реестр, перезагрузиться и посмотреть все SCHANNEL события в журнале событий системы:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\EventLogging 

Надежда, что помогает, но это может быть много ударов в темноте, я думаю. ..

+0

Более подробную информацию следует извлечь из трассировки System.NET, если вам посчастливилось прочитать Microsoft KB http://support.microsoft.com/kb/947285, в котором приведен пример. –