WebClient多线程响应

时间:2009-06-01 18:14:26

标签: c# httpwebrequest

我正在使用WebClient对我的Web服务执行两个并行请求,并使用ThreadPool对它们进行多线程处理。但是,我在其中一个获得此WebException的线程中遇到问题:

  

服务器提交了协议违规。节= ResponseStatusLine

我做了一些研究,发现它可能是一个不安全的标头验证问题,但请求在单线程模式下工作正常。

所以,为了澄清,我正在解雇两个主题。一个是对URI进行GET,一个是对URI进行一些数据的POST。第一个GET工作正常,但POST失败,上面有WebException。

有什么想法吗? 感谢。

3 个答案:

答案 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的一个实例,还是每个线程都有自己的实例?它应该是后者。