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 Http 服务而不使用 .Net Core 2 中的 WebHttpBinding?