HttpWebRequest.BeginGetResponse抛出意外异常

时间:2014-02-11 14:54:29

标签: c# rest windows-phone-8 httpwebrequest

我正在构建一个调用大量REST服务的WindowsPhone 8应用程序。 服务经过测试,一切正常,我的IISExpress服务器也有一些日志,因为我在这里测试工作站上的所有内容。

当我试图重复一堆PUT请求时,我的问题会弹出。在我测试时,这些请求每次都是相同的。第一个回答OK。第二个是回答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级别,我收到一个异常,并显示消息“服务器返回错误:未找到”。 最大的问题是: - 我无法自己处理状态,因为它封装在一个不知道HttpStatusCode的WebException中 - 真正的错误不是 Not Found ,而是 UnAuthorized 。我的程序可以处理 UnAuthorized ,因为它是预期的,但是这个错误只是被上面的函数捕获,上面写着“发生任何错误,请在几分钟后重试”。

以下是有关例外的一些信息:

  

GetAddresses-&gt; GetAuthRequest {System.Net.WebException:远程服务器返回错误:NotFound。 ---&GT; System.Net.WebException:远程服务器返回错误:NotFound。   在System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)   在System.Net.Browser.ClientHttpWebRequest。&lt;&gt; c_ DisplayClasse.b _d(Object sendState)   在System.Net.Browser.AsyncHelper。&lt;&gt; c_ DisplayClass1.b _0(Object sendState)   ---内部异常堆栈跟踪结束---   在System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod,Object state)   在System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)   在System.Threading.Tasks.TaskFactory 1.FromAsyncCoreLogic(IAsyncResult iar, Func 2 endFunction,Action 1 endAction, Task 1 promise,Boolean requiresSynchronization)   ---从抛出异常的先前位置开始的堆栈跟踪结束---   在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)   在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)   在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()

0 个答案:

没有答案