我正在使用WebClient对我的Web服务执行两个并行请求,并使用ThreadPool对它们进行多线程处理。但是,我在其中一个获得此WebException的线程中遇到问题:
服务器提交了协议违规。节= ResponseStatusLine
我做了一些研究,发现它可能是一个不安全的标头验证问题,但请求在单线程模式下工作正常。
所以,为了澄清,我正在解雇两个主题。一个是对URI进行GET,一个是对URI进行一些数据的POST。第一个GET工作正常,但POST失败,上面有WebException。
有什么想法吗? 感谢。
答案 0 :(得分:1)
我通过添加
解决了我的问题request.ServicePoint.Expect100Continue = false;
在进行POST调用之前。根据wireshark发生的事情是我的HttpWebRequest期待100继续,但获得401未经授权,但它在服务器响应之后仍然发送数据,而不是发送授权标头。它并非每次都会发生,但这似乎解决了这个问题。
答案 1 :(得分:1)
在web.config中添加以下内容解决了我的问题。
<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing="true" />
</settings>
</system.net>
答案 2 :(得分:0)
请注意,WebClient类的实例不保证是线程安全的。您是在整个线程中使用WebClient的一个实例,还是每个线程都有自己的实例?它应该是后者。