【问题标题】:Web application crashes after deploying to azure because of WebRequestHandler由于 WebRequestHandler,Web 应用程序在部署到 azure 后崩溃
【发布时间】:2017-08-25 19:58:00
【问题描述】:

我有一个从其他服务获取数据的 API。以下代码在本地 IIS 上运行良好:

if (model.Phone[0] != '+')
        {
            model.Phone = "+" + model.Phone;
        }

        string data = Newtonsoft.Json.JsonConvert.SerializeObject(new { ID = Guid.NewGuid(), Phone = model.Phone});

        if (!string.IsNullOrEmpty(model.Email))
        {
            data = Newtonsoft.Json.JsonConvert.SerializeObject(new { ID = Guid.NewGuid(), Phone = model.Phone, Email = model.Email });
        }

        logger.Debug("GetDataFromSupplier before try");

        try
        {
            WebRequestHandler handler = new WebRequestHandler();
            X509Certificate2 certificate = GetMyX509Certificate();
            ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
            handler.ClientCertificates.Add(certificate);
            HttpClient client = new HttpClient(handler);
            var content = new StringContent(data, Encoding.UTF8, "application/json");
            var request = client.PostAsync(API_URL, content);
            var result = request.Result;
            return result;
        } catch (Exception ex)
        {
            logger.Debug($"GetDataFromSupplier in catch: {ex.Message}");
            var message = new HttpResponseMessage(HttpStatusCode.BadRequest);
            message.Content = new StringContent(ex.Message);
            return message;
        }

但在我将此代码部署到 Azure 后,会话会在这行代码中中断:

WebRequestHandler handler = new WebRequestHandler();

客户端应用程序收到 502 HTTP 错误。我试图增加网络服务器的 RAM。 catch 块甚至没有运行。什么会导致这个问题?

【问题讨论】:

  • 最好使用像wireshark或fiddler这样的嗅探器。将来自本地 IIS 的 http 消息与失败的消息进行比较。比较工作和非工作之间的标题。异常被另一个处理程序捕获,或者是 Windows 32 方法,您需要获取最后一个 Windows 错误。

标签: c# azure webrequest bad-gateway


【解决方案1】:

查看 WebRequestHandler https://msdn.microsoft.com/en-us/library/system.net.http.webrequesthandler(v=vs.110).aspx 的文档,它可能不是在这里使用的最佳组件。

也许,对 HttpClient 进行同样的尝试。 https://msdn.microsoft.com/en-us/library/system.net.http.httpclient(v=vs.110).aspx 因为,WebRequestHandler 更适合桌面应用程序。

既然你提到了 IIS,我猜你不是在构建桌面应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-11
    • 2020-08-06
    • 2014-10-26
    • 2011-04-20
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    相关资源
    最近更新 更多