Асинхронный вызов WCF возвращает ошибку 10054: «Существующее соединение было принудительно закрыто удаленным хостом» - PullRequest
2 голосов
/ 18 декабря 2009

У меня есть WCF, потребляемый Windows Mobile 5.0 или выше приложением с .NET Compact Framework 2.0 SP2 и C # .

Когда приложение использует асинхронный «метод», оно выдает это сообщение. Это также stackTrace внутреннего исключения:

at System.Net.Sockets.Socket.ReceiveNoCheck()
at System.Net.Sockets.Socket.Receive()
at System.Net.Connection.Read()
at System.Net.HttpWebRequest.fillBuffer()
at System.Net.HttpWebRequest.getLine()
at System.Net.HttpWebRequest.parseResponse()
at System.Net.HttpWebRequest.startReceiving()
at System.Net.Connection.startReceiving()
at WorkItem.doWork()
at System.Threading.Timer.ring()

Сообщение об исключении:

"Невозможно прочитать данные из транспортного соединения."

И его stackTrace:

at System.Net.HttpWebRequest.finishGetResponse()
at System.Net.HttpWebRequest.GetResponse()
at System.Web.Services.Protocols.WebClientProtocol.GetWebResponse()
at System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse()
at System.Web.Services.Protocols.SoapHttpClientProtocol.doInvoke()
at System.Web.Services.Protocols.SoapHttpClientProtocol.doAsyncInvoke()
at WorkItem.doWork()
at System.Threading.Timer.ring()

Что происходит?

Если вам нужно больше деталей, скажите мне!

Update :

У меня два компьютера, и на обоих происходит одна и та же ошибка. Один из них - Windows 7 Ultimate, 64-битная, а другой - Windows Vista Home Premium 32-битная. Может быть, это что-то связано с кодом ...

Спасибо.

Ответы [ 3 ]

1 голос
/ 28 мая 2014

Этот сайт имел ответ, который работал для меня, состоящий из трех частей:

  1. Отключить KeepAlive

    webRequest.KeepAlive = false;

  2. Установить ProtocolVersion на Version10

    webRequest.ProtocolVersion = HttpVersion.Version10;

  3. Ограничение количества точек обслуживания (ServicePoint - этоnull, пока не будет вызван GetResponse ())

    webRequest.ServicePoint.ConnectionLimit = 1;

0 голосов
/ 20 сентября 2011

Я видел, как это происходит, когда интервал между вызовами превышает время ожидания активности HTTP и / или некоторое время ожидания сеанса NAT. Сервер или промежуточный ящик закрывает соединение, и клиент не замечает, пока не попытается повторно использовать соединение. В этом случае целесообразно повторить попытку.

0 голосов
/ 18 декабря 2009

Для подобных сокетов мы обычно должны захватывать сетевой трафик, используя Wireshark или Microsoft Network Monitor для устранения неполадок. Только когда такая информация доступна, мы можем сказать, что происходит по проводному (или беспроводному) каналу.

...