我正在访问C#应用程序中的Dynamics 365 Business Central OData API,当在我的本地系统中访问数据良好时,当我们将应用程序部署到客户端服务器时,随机(50%(他们会得到错误";服务器违反了协议。Section=ResponseStatusLine";。
我已经检查了这篇文章https://techcommunity.microsoft.com/t5/iis-support-blog/protocol-violation-section-responsestatusline/ba-p/1227792并应用了所有3个建议,但没有一个有效。
我可以访问本地系统中的客户端Business Central API集成应用程序,而不会出现任何问题。
假设这是客户端防火墙或负载均衡器问题。但无法找到解决方案。
这个问题背后有很多情况,避免了这个问题,而不是实际修复它。导致这个错误的最常见原因之一是请求中的标头损坏或丢失。
解决方案:
- 服务器以错误的方式返回100 continue。设置expect100 continue为false,并将套接字空闲时间减少到两秒
HttpRequestObj.ServicePoint.Expect100Continue = false;
HttpRequestObj.ServicePoint.MaxServicePointIdleTime = 2000;
忽略损坏/丢失的标头。参考:链接
如果skype在机器上运行,请停止它。
如果Web服务器使用输出
byte-order-marker
(BOM(的UTF-8
。例如,默认常量Encoding.UTF8
输出BOM,很容易忘记这一点。网页在Firefox和Chrome中可以正常工作,但HttpWebRequest
会爆炸。一个快速的解决方案是将Web服务器更改为使用不输出BOM的UTF-8
编码。请检查请求服务器的终点。例如:
https
或http
。