由于 WebRequestHandler,Web 应用程序在部署到 Azure 后崩溃
Web application crashes after deploying to azure because of WebRequestHandler
我有一个 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 块甚至没有 运行。什么会导致这个问题?
查看 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,我猜你不是在构建桌面应用程序。
我有一个 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 块甚至没有 运行。什么会导致这个问题?
查看 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,我猜你不是在构建桌面应用程序。