Как найти причину и SocketException с сообщением, что установленное соединение было прервано программным обеспечением на вашем хост-компьютере? - PullRequest
4 голосов
/ 19 февраля 2010

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

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

Приложение продолжает видеть эту проблему в течение 1 или 2 дней. Или иногда показывать проблему сразу после запуска (очень редко). Лучшая пробежка, которая у меня была, была от 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)

1 Ответ

3 голосов
/ 09 октября 2011

Нашли ли вы решение этой проблемы?Возможно, вы сможете приблизиться к решению, если добавите трассировку сети в свой 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

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

...