代码之家  ›  专栏  ›  技术社区  ›  Gabe

WebException getResponse()未捕获

  •  0
  • Gabe  · 技术社区  · 8 年前

    这可能是一个愚蠢的问题,我只是遗漏了一些显而易见的东西。我在处理网络错误等方面做了很多研究,但我似乎找不到为什么会发生这种情况的答案。

    基本上,我从中调用的服务器发送json并返回,但在请求上存在间歇性问题-即502 BadGateway-没有其他问题。当我说间歇性时,我强调这一点,因为它可以在5小时内完美地处理200个请求,然后抛出502,但也可能在第一个请求时发生。很难预测。另外,需要注意的是,我没有访问服务器的权限,这是配置或类似的东西。完全远程。

    在开发环境中,如果我没有收到它成功处理的502,我可以继续处理异常,程序继续运行,并在下一个请求时使用相同的请求返回到同一个服务器。然而,独立于开发平台,我会遇到一个没有异常数据的硬崩溃。

    我尝试过移动try/catch,将问题调用与其他代码分离,将其组合等等,我总是收到相同的问题。

    现在已经很晚了,我可能只是没有正确处理它,所以感谢任何指导。今晚我拒绝放弃这件事——一个星期以来,我一直是我的眼中钉。如果我只是一个擦洗者,会看到新鲜的眼睛,嘲笑我,叫我出来。

    提前谢谢

    ps.异常正在getResponse()处发出

    try
            { 
                using (HttpWebResponse inboundResponse = (HttpWebResponse)outboundRequest.GetResponse()) //exception here for 502
                using (StreamReader stream = new StreamReader(inboundResponse.GetResponseStream()))
                using (JsonTextReader reader = new JsonTextReader(stream))
                {
                    List<T> outputData = new List<T>();
                    while (reader.Read())
                    {
                        JsonSerializer serializer = new JsonSerializer();
                        var tempData = serializer.Deserialize<T>(reader);
                        outputData.Add(tempData);
                    }
                    inboundResponse.Close();
                    return outputData;
                }
            }
            catch (WebException e)
            {
                if (e.Status == WebExceptionStatus.ProtocolError)
                {
                    UIController.addSystemMessageToChat("Protocol Error");
                    switch(((HttpWebResponse)e.Response).StatusCode)
                    {
                        case HttpStatusCode.BadGateway:
                            UIController.addSystemMessageToChat("Resending Response");
                            //process exception
                        default:
                            throw;
                    }
                }
    
            }
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   NikolaiDante    8 年前

    它可能不是 WebException

    尝试为添加捕获 Exception 进入处理程序:

    try
    { 
        using (HttpWebResponse inboundResponse = (HttpWebResponse)outboundRequest.GetResponse()) //exception here for 502
        using (StreamReader stream = new StreamReader(inboundResponse.GetResponseStream()))
        using (JsonTextReader reader = new JsonTextReader(stream))
        {
            List<T> outputData = new List<T>();
            while (reader.Read())
            {
                JsonSerializer serializer = new JsonSerializer();
                var tempData = serializer.Deserialize<T>(reader);
                outputData.Add(tempData);
            }
            inboundResponse.Close();
            return outputData;
        }
    }
    catch (WebException e)
    {
        if (e.Status == WebExceptionStatus.ProtocolError)
        {
            UIController.addSystemMessageToChat("Protocol Error");
            switch(((HttpWebResponse)e.Response).StatusCode)
            {
                case HttpStatusCode.BadGateway:
                    UIController.addSystemMessageToChat("Resending Response");
                    //process exception
                default:
                    throw;
            }
        }
    
    }
    catch (Exception e)
    {
        // catch and handle an unknown / unexpected exception type
    }