WebException: основное соединение было закрыто - PullRequest
0 голосов
/ 04 августа 2011

В настоящее время я звоню в веб-сервис со страницы ASP.net.Я пытаюсь вызвать веб-сервис на основе REST для запроса определенного действия, и возвращается 404 (что представляет собой конкретную ошибку для моего приложения).Я пытаюсь поймать ошибку, но когда возвращается 404, мое приложение продолжает зависать, и я в итоге ловлю следующую ошибку.

[System.Net.WebException] = {"Основное соединение было закрыто:на приеме произошла непредвиденная ошибка. "}

Почему бы через 2 секунды после того, как веб-служба ответит 404?

try
{
    newPassword = Customer.ResetPassword(_transaction.Centre.Id, newPassword);
}
catch(WebException ex)
{
    HttpWebResponse response = (HttpWebResponse)ex.Response;

    if ((response != null) && (response.StatusCode == HttpStatusCode.NotFound))
    {
        //then the email address doesnt exist
        ErrorPage(104);
    }
    else
    {
         ErrorPage();
    }
 }
 catch (Exception ex)
 {
    ErrorPage();
 }

, возникнет следующая ошибка:*

Request currentRequest = new Request(uri,
            Communication.Request.HttpRequestType.POST,[hidden][hidden]);

Response response = currentRequest.Send(Serializer.Serialize<ResetPassword (resetPassword));

return Serializer.Deserialize<ResetPassword>(response.BodyData);

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

Спасибо всем за помощь!

1 Ответ

2 голосов
/ 04 августа 2011

Поскольку вы предоставили мало информации о вашей системе:

Вы , вероятно, досрочно завершаете вызов веб-службы, например

HttpContext.Current.Response.End()

Код веб-службы (в .NET), вероятно, пытается завершить запрос, но вы закрыли соединение раньше. Это также происходит с Response.Redirect(), но вы никогда не увидите его на веб-странице, потому что вы уже завершили вывод для пользователя. Это не относится к вашему 404. Код веб-службы выдает WebException, но нет ничего, что можно обработать / отформатировать вывод.


Обновление

На основании ваших отзывов я могу сделать вывод, что ваша проблема, вероятно, либо:

  1. В данных, отправляемых веб-сервису
  2. Как веб-сервис обрабатывает данные

Вы должны загрузить Fiddler2 и прослушать http-запрос к вашему веб-сервису, чтобы проверить, что на самом деле происходит по проводам. Если все подтвердится, я могу подумать только о двух вещах:

  1. Что-то в вашем Request / Response не так. Вместо этого вы можете использовать WebClient и позвонить либо UploadData(...), либо UploadString(...), чтобы передать ваши данные в веб-службу.
  2. Что-то не так в веб-службе, которая заставляет его закрывать соединение, прежде чем завершить ответ так, как этого ожидает ваш клиент.

WebException: лежащее в основе соединение было закрыто: при получении произошла непредвиденная ошибка. Должно произойти, только когда клиент ожидает получить данные (например, тело после заголовка), но сервер завершает ответ рано .

...