Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HttpWebRequest.BeginGetResponse引发意外异常_C#_Rest_Windows Phone 8_Httpwebrequest - Fatal编程技术网

C# HttpWebRequest.BeginGetResponse引发意外异常

C# HttpWebRequest.BeginGetResponse引发意外异常,c#,rest,windows-phone-8,httpwebrequest,C#,Rest,Windows Phone 8,Httpwebrequest,我正在构建一个WindowsPhone8应用程序,它调用一系列REST服务。 服务已经过测试,一切正常,我还有一些来自IISExpress服务器的日志,因为我在这里测试我工作站上的一切 当我试图重复一系列PUT请求时,我的问题就会出现。在我进行测试时,这些请求每次都是相同的。第一个回答可以。第二个是用来回答401个未经授权的问题,根据日志,这是可以的 2014-02-11 14:29:24 169.254.80.80 PUT/api/UserData key=2a80391882dc4a29fb

我正在构建一个WindowsPhone8应用程序,它调用一系列REST服务。 服务已经过测试,一切正常,我还有一些来自IISExpress服务器的日志,因为我在这里测试我工作站上的一切

当我试图重复一系列PUT请求时,我的问题就会出现。在我进行测试时,这些请求每次都是相同的。第一个回答可以。第二个是用来回答401个未经授权的问题,根据日志,这是可以的

2014-02-11 14:29:24 169.254.80.80 PUT/api/UserData key=2a80391882dc4a29fb4419bd70861ef9&sign=220a5962580eb5690109b2602be75b5fadf508ce9f464e4bdfae33f4520f9729&addresses=True 1476-169.254.127.48本地主机-4010 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;
    }
}
公共异步任务httpRequest(HttpWebRequest) { 收到字符串; 使用(var response=(HttpWebResponse)(wait Task.Factory.fromsync(request.BeginGetResponse,request.EndGetResponse,null))) { if(response.StatusCode!=HttpStatusCode.OK) { 请求失败(请求失败); 开关(响应状态代码) { 案例HttpStatusCode.InternalServerError: 抛出新的WebException(新的StreamReader(response.GetResponseStream()).ReadToEnd(),null,WebExceptionStatus.UnknownError,response); 案例HttpStatusCode。未经授权: this.IsAuthorizedProblem=true; 抛出新的WebException(新的StreamReader(response.GetResponseStream()).ReadToEnd(),null,WebExceptionStatus.ProtocolError,response); 案例HttpStatusCode.BadRequest: 抛出新的WebException(新的StreamReader(response.GetResponseStream()).ReadToEnd(),null,WebExceptionStatus.ProtocolError,response); 违约: 抛出新的WebException(新的StreamReader(response.GetResponseStream()).ReadToEnd(),null,WebExceptionStatus.UnknownError,response); } 抛出新的WebException(新的StreamReader(response.GetResponseStream()).ReadToEnd(),null,WebExceptionStatus.UnknownError,response); } 使用(var responseStream=response.GetResponseStream()) { 使用(var sr=新的StreamReader(responseStream)) { 已接收=等待sr.ReadToEndAsync(); } } 请求成功(请求); 收到的报税表; } } 我无法理解的是,在BeginGetResponse级别,我抛出了一个异常,并显示一条消息“服务器返回错误:未找到”。 最大的问题是: -我自己无法处理该状态,因为它被封装在一个WebException中,该WebException不知道
HttpStatusCode
-未找到真正的错误,但未经授权。我的程序可以像预期的那样处理未经授权的错误,但这个错误只是被上面的一个函数捕捉到,该函数说“如果发生任何错误,请在几分钟后重试”

以下是有关异常的一些信息:

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(对象发送状态)中 在System.Net.Browser.AsyncHelper.c_DisplayClass1.b_0中(对象发送状态) ---内部异常堆栈跟踪的结束--- 位于System.Net.Browser.AsyncHelper.BeginNoui(SendOrPostCallback beginMethod,对象状态) 位于System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 在System.Threading.Tasks.TaskFactory
1.FromAsyncCoreLogic(IAsyncResult iar,Func
2 endFunction,Action
1 endAction,Task
1 Promission,布尔要求同步) ---来自引发异常的上一个位置的堆栈结束跟踪--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中 在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()中


我已经编辑了你的标题。请看,“,其中的共识是“不,他们不应该”。很抱歉,这只是我在谷歌上搜索的一个坏习惯。