根本原因是微软没有容忍不符合RFC 822中的httpHeader必须以CRLF结束的规定的服务器响应。
解决办法是对web.config (app.config) 配置做一些调整
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing= "true " />
</settings>
</system.net>
</configuration>
config里配置一下就行了:<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing="true" />
</settings>
</system.net>
基础连接已经关闭: 该服务器提交了 HTTP 协议冲突这个通常在我们使用.net http协议组件访问 某些互联网url资源的时候发生。
但是发觉采用winhttp的封装来读取是没有问题的,正常返回的,但有托管的原生组件却去使用COM,总觉得不爽。但是却不知道问题到底出在那里?感觉,肯定同.net的http实现代码有关系,因为同一个url,COM组件的读取是正常的(COM时代已经经过了考验);但是,又不是所有的url出现类似故障,一般是大约一些动态的asp.net页面出现的概率比较大。
近日终于查出来了,微软有相关的KB讨论:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=296969&SiteID=1
具体来说,就是在配置文件中加入
<configuration>
。。。。。。
<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing="true" />
</settings>
</system.net>
</configuration>
原来是部分url的实现http协议可能会出现并非CRLF的结束部分,这个被实现较为严格的.net http协议组件所捕获,就出现题是错误,而实际上,这个大多数com时代的http协议组件是可以忽略的。为了让.net 的原生组件也忽略,就如上配置,覆盖系统的machine.config缺省设定。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)