HttpWebRequest.BeginGetResponse выдает неожиданное исключение

Я создаю приложение для WindowsPhone 8, которое вызывает множество служб REST. Службы проверены, и все в порядке, у меня также есть некоторые журналы с моего сервера IISExpress, поскольку я здесь проверяю все на своей рабочей станции.

Моя проблема всплывает, когда я пытаюсь повторить кучу запросов PUT. Пока я тестирую, эти запросы всегда одинаковы. Первые ответы ок. Второй предназначен для ответа 401 UnAuthorized и согласно журналам, все в порядке.

2014-02-11 14:29:24 169.254.80.80 PUT /api/UserData key=2a80391882dc4a29fb4419bd70861ef9&sign=220a5962580eb5690109b2602be75b5fadf508ce9f464e4bdfae33f4520f9729&addresses=True 1476 - 169.254.127.48 NativeHost - 401 0 0 60 Проблема появляется на стороне клиента. Я получил это:

public async Task<string> httpRequest(HttpWebRequest request)
{
    string received;
    using (var response = (HttpWebResponse)(await Task<WebResponse>.Factory.FromAsync(request.BeginGetResponse, request.EndGetResponse, null)))
    {
        if (response.StatusCode != HttpStatusCode.OK)
        {
            RequestFailed(request);
            switch (response.StatusCode)
            {
                case HttpStatusCode.InternalServerError:
                    throw new WebException(new StreamReader(response.GetResponseStream()).ReadToEnd(), null, WebExceptionStatus.UnknownError, response);


                case HttpStatusCode.Unauthorized:
                    this.IsAuthorizedProblem = true;
                    throw new WebException(new StreamReader(response.GetResponseStream()).ReadToEnd(), null, WebExceptionStatus.ProtocolError, response);

                case HttpStatusCode.BadRequest:
                    throw new WebException(new StreamReader(response.GetResponseStream()).ReadToEnd(), null, WebExceptionStatus.ProtocolError, response);
                default:
                    throw new WebException(new StreamReader(response.GetResponseStream()).ReadToEnd(), null, WebExceptionStatus.UnknownError, response);

            }
            throw new WebException(new StreamReader(response.GetResponseStream()).ReadToEnd(), null, WebExceptionStatus.UnknownError, response);

        }
        using (var responseStream = response.GetResponseStream())
        {

            using (var sr = new StreamReader(responseStream))
            {

                received = await sr.ReadToEndAsync();
            }
        }
        RequestSucceded(request);
        return received;
    }
}

Я не могу понять, что на уровне BeginGetResponse я получил исключение с сообщением "Сервер возвращает ошибку: не найден". Большая проблема в том, что: - Я не могу обработать статус самостоятельно, поскольку он инкапсулирован в исключение WebException, которое не знает HttpStatusCode - Настоящая ошибка не найдена, а не авторизована. Моя программа может работать с UnAuthorized, поскольку это то, что ожидается, но эта ошибка только что обнаружена вышестоящей функцией, которая говорит: "Любая ошибка возникает, пожалуйста, повторите попытку через несколько минут".

Вот некоторая информация об исключении:

GetAddresses-> GetAuthRequest {System.Net.WebException: удаленный сервер возвратил ошибку: NotFound. ---> System.Net.WebException: удаленный сервер возвратил ошибку: NotFound. в System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult) в System.Net.Browser.ClientHttpWebRequest. <> c_ DisplayClasse.b _d (объект sendState) в System.Net.Browser.Aslassb_serser. (Объект sendState) --- Конец внутренней трассировки стека исключений --- в System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Состояние объекта) в System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult). Threading.Tasks.TaskFactory 1.FromAsyncCoreLogic(IAsyncResult iar, Func 2 endFunction, Action 1 endAction, Task 1 обещание, Boolean требуется синхронизация) --- Конец трассировки стека из предыдущего местоположения, в котором было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification) в System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()

0 ответов

Другие вопросы по тегам