Клиент закрывает TCP-соединение перед получением асинхронного ответа WCF - PullRequest
1 голос
/ 11 ноября 2011

У нас есть приложение Silverlight 4.0, которое выполняет много вызовов нашим службам WCF. У нас много пользователей, и в основном это нормально, но у одного пользователя есть проблема, которая, кажется, ограничена определенным асинхронным вызовом на одной (Windows 7) машине. Это всегда воспроизводимо, но только для этого вызова с этой машины. Запрос WCF отправляется, но после паузы приложение Silverlight выдает следующее:

Message: [HttpWebRequest_WebException_RemoteServer]
Arguments: NotFound
Stack Trace:    at System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result)
   at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)
   at System.ServiceModel.ClientBase`1.ChannelBase`1.EndInvoke(String methodName, Object[] args, IAsyncResult result)
   at MyContractClientChannel.EndApplicationSave(IAsyncResult result)
   at MyServiceContract.EndApplicationSave(IAsyncResult result)
   at MyServiceContractClient.OnEndApplicationSave(IAsyncResult result)
   at System.ServiceModel.ClientBase`1.OnAsyncCallCompleted(IAsyncResult result)

Исходный вызов выглядит так:

using (new OperationContextScope((IContextChannel)Client.InnerChannel))
    {
        Client.ApplicationSaveAsync(request, callback);
    }

Client.ApplicationSaveAsync - это обычный автоматически сгенерированный код, который вызывает System.ServiceModel.ClientBase.InvokeAsync.

Когда мы смотрим разговор с WireShark, мы видим отправку пакетов запроса (это занимает около двух секунд) с последующей задержкой около десяти секунд. Затем наступает странная часть. На машине, которая работает, мы видим, что ответные пакеты приходят с сервера, но на проблемной машине мы видим, что клиент внезапно отправляет пустой пакет с установленным флагом TCP FIN (до того, как будет получен какой-либо ответ). Мы не можем понять, почему он это сделал. Когда мы используем Fiddler вместо WireShark, Fiddler сообщает «Состояние сеанса: прервано», что выглядит как очередная интерпретация той же основной проблемы (что клиент неожиданно отключил соединение).

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

1 Ответ

0 голосов
/ 17 ноября 2011

Проблема, похоже, исчезла, когда мы создали новый профиль Windows для пользователя.

...