在 windows 服务器 2012 R2 上发送 http/2 请求
send http/2 request on windows server 2012 R2
我想在我的应用程序中使用 APNs 推送服务,所以我使用此代码:
var responseString = string.Empty;
using (var request = new HttpClient(new Http2CustomHandler()))
{
var content = new StringContent(body);
request.DefaultRequestHeaders.Add("authorization", $"bearer {authorization}");
request.DefaultRequestHeaders.Add("apns-topic", topicName);
if (!string.IsNullOrWhiteSpace(iD)) request.DefaultRequestHeaders.Add("apns-id", iD);
if (!string.IsNullOrWhiteSpace(expiration)) request.DefaultRequestHeaders.Add("apns-expiration", expiration);
if (!string.IsNullOrWhiteSpace(priority)) request.DefaultRequestHeaders.Add("apns-priority", priority);
if (!string.IsNullOrWhiteSpace(collapseID)) request.DefaultRequestHeaders.Add("apns-collapse-id", collapseID);
var result = request.PostAsync(url, content).GetAwaiter().GetResult();
responseString = result.Content.ReadAsStringAsync().GetAwaiter().GetResult();
}
它在我的机器上工作得很好 (windows 10)。但是当我在我的服务器(windows server 2012 R2)上部署应用程序时,它抛出了这个异常:
System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.Http.WinHttpException: A security error occurred
有什么办法可以解决这个问题吗?
您很可能已经发现,这可能是因为 HTTP/2 仅在 Windows Server 2016 (IIS10) 和 Windows 10 中受支持。
Windows Server 2012 上的 IIS 版本不支持 HTTP/2。
见https://docs.microsoft.com/en-us/iis/get-started/whats-new-in-iis-10/http2-on-iis
我想在我的应用程序中使用 APNs 推送服务,所以我使用此代码:
var responseString = string.Empty;
using (var request = new HttpClient(new Http2CustomHandler()))
{
var content = new StringContent(body);
request.DefaultRequestHeaders.Add("authorization", $"bearer {authorization}");
request.DefaultRequestHeaders.Add("apns-topic", topicName);
if (!string.IsNullOrWhiteSpace(iD)) request.DefaultRequestHeaders.Add("apns-id", iD);
if (!string.IsNullOrWhiteSpace(expiration)) request.DefaultRequestHeaders.Add("apns-expiration", expiration);
if (!string.IsNullOrWhiteSpace(priority)) request.DefaultRequestHeaders.Add("apns-priority", priority);
if (!string.IsNullOrWhiteSpace(collapseID)) request.DefaultRequestHeaders.Add("apns-collapse-id", collapseID);
var result = request.PostAsync(url, content).GetAwaiter().GetResult();
responseString = result.Content.ReadAsStringAsync().GetAwaiter().GetResult();
}
它在我的机器上工作得很好 (windows 10)。但是当我在我的服务器(windows server 2012 R2)上部署应用程序时,它抛出了这个异常:
System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.Http.WinHttpException: A security error occurred
有什么办法可以解决这个问题吗?
您很可能已经发现,这可能是因为 HTTP/2 仅在 Windows Server 2016 (IIS10) 和 Windows 10 中受支持。
Windows Server 2012 上的 IIS 版本不支持 HTTP/2。
见https://docs.microsoft.com/en-us/iis/get-started/whats-new-in-iis-10/http2-on-iis