【问题标题】:HttpClient HTTP/2 call to APN from Azure FunctionHttpClient HTTP/2 从 Azure Function 调用 APN
【发布时间】:2019-04-29 21:51:30
【问题描述】:

我正在使用 HttpClient 将 Apple 推送通知发送到 APN HTTP/2 服务器。我已经设法通过使用System.Net.Http.WinHttpHandler nuget 包使其工作:

var http = new HttpClient(new WinHttpHandler());
var request = new HttpRequestMessage(HttpMethod.Post, new Uri(url))
{
    Version = new Version(2, 0),
    Content = new StringContent(json)
};
// Set headers... Send... Read response... HTTP 200 OK

这在 Windows 上运行良好。问题是,其他任何地方都不支持 WinHttpHandler。例如,我无法从 Azure Functions 运行此代码。我的问题是 - 是否有任何使用 .NET Core 2.1 发送 HTTP/2 请求的跨平台方式,或者 Azure Functions 2.0 是否有任何变通方法使其正常工作?

【问题讨论】:

    标签: c# .net-core azure-functions dotnet-httpclient http2


    【解决方案1】:

    我在 Azure Functions 2.0 上使用 WinHttpHandler 时遇到了问题。我已经设法使用here 的解决方法解决了它。基本上我把 .NET Standard 2.0 System.Net.Http.WinHttpHandler.dll 程序集放到函数项目的根目录下并添加了这个:

      <ItemGroup>
        <None Update="System.Net.Http.WinHttpHandler.dll">
          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
        </None>
      </ItemGroup>
      <Target Name="CopySPSM" BeforeTargets="Build">
        <Copy SourceFiles="System.Net.Http.WinHttpHandler.dll" DestinationFolder="$(OutputPath)\bin" />
      </Target>
    

    有了它和设置 WEBSITE_LOAD_USER_PROFILE = 1 以使CngKey.Import 为 APN 签名 JWT 令牌,它开始工作。

    【讨论】:

      【解决方案2】:

      当您的目标是 .NET Core 2.1 并发出 HTTP/2 请求时,它将降级到 HTTP/1.1。 您可以将 .NET Core 2.1 切换到不同的 HTTP 堆栈。 .Net Core 2.1 目前不支持 HTTP/2.0

      所以,我建议您可以切换回支持 HTTP/2.0 的旧堆栈。更多详情可以参考这个issue

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-24
        • 1970-01-01
        • 1970-01-01
        • 2019-04-08
        • 2018-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多