WCF Web 服务不支持 HTTP 版本 2

Posted

技术标签:

【中文标题】WCF Web 服务不支持 HTTP 版本 2【英文标题】:WCF Webservice does not support HTTP version 2 【发布时间】:2015-06-03 14:51:16 【问题描述】:

我正在尝试将请求从 Fiddler 发送到我的 WCF 网络服务。 当我发送 HTTP/1.2 请求时,它可以工作,但是当我尝试发送 HTTP/2 请求时,我得到了响应:

HTTP 错误 505。请求中的 HTTP 版本不受支持

我的合同是这样定义的:

[WebInvoke(Method = "POST", UriTemplate = "/GetEmployees", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
string GetEmployees(Stream jsonParameter);

我的端点是这样定义的:

<endpoint address="XMLService" behaviorConfiguration="restPoxBehavior"
 binding="webHttpBinding" bindingConfiguration="" contract="WCF_SOAP_REST_Service.IService" />

 <behavior name="restPoxBehavior">
          <webHttp />
        </behavior>

我做错了什么?

【问题讨论】:

【参考方案1】:

HTTP/2 是全新的......尚未完全支持! Wikipedia 声称,我猜你使用的 IIS 仅支持 Windows 10 Beta 上的 HTTP/2;你的错误是完全正常的。

【讨论】:

【参考方案2】:

我做错了什么?

您使用的是过时的 API。不要使用 WCF REST,将 ASP.NET WebAPI 用于新的 REST 服务。

后者与托管无关,因此只要您找到支持 HTTP/2 和 WebAPI(通过 OWIN 或其他方式)的 Web 服务器,您就可以在 HTTP/2 上运行您的 REST API。

【讨论】:

【参考方案3】:

我正在查看 http/2 (en.wikipedia.org/wiki/HTTP/2) 的差异并看到两个重大变化 1) 不支持 http 1.1 块模式 2) 使用 TLS 1.2 或更高版本(即TLS 1.3)。 fiddler 嗅探器功能应该适用于任何连接(尽管新协议的解码可能无法解码)。如果 fiddler 连接工具正在发送块模式 1.1 或使用较旧的 TLS 1.1,它将无法工作。所以这意味着你不能用 fiddler 测试你的 http/2 wcf 服务。试试Firefox之类的浏览器或... 我不确定,但我想我在 wcf 上实现了 http/2。 here你可以读矿石。

【讨论】:

以上是关于WCF Web 服务不支持 HTTP 版本 2的主要内容,如果未能解决你的问题,请参考以下文章

支持 HTTP 和 HTTPS Web.Config WCF 服务

WCF会话

Web Service ,WCF以及Web API的对比

有没有办法让客户端连接到现有的 WCF Web Http 服务而不使用 .Net Core 2 中的 WebHttpBinding?

WCF Web 服务错误:“服务端点绑定不使用 HTTP 协议”?

WCF Web 服务错误:无法激活该服务,因为它不支持 ASP.NET 兼容性