解決WebService/WCF調用時報錯"服務器提交了協議沖突. Section=ResponseStatusLine"問題


今天更新了一個網站,新增了一個頁面,調用WebService,在測試環境好好的,部署到正式環境后就莫名報錯:

服務器提交了協議沖突. Section=ResponseStatusLine

網上查了好多解決方案,有說加這個配置節的:

<system.net>
  <settings>
    <httpWebRequest useUnsafeHeaderParsing="true"/>
  </settings>
</system.net>

然而並沒有什么卵用啊!

一個偶然的發現,讓我找到了真正的原因。

我在開發環境不斷調試,我開了一個IE的新Session,發現WebService不能直接訪問了,被代理阻止了,WTF!關掉代理,立即好了。

我是用svcutil生成的output.config嵌入到我的web.config里的,看到里面的ServiceModel是這樣的:

<system.serviceModel>
  <bindings>
    <basicHttpBinding>
      <binding name="xxx" closeTimeout="00:01:00" ...
         useDefaultWebProxy="true">
         ...

就是這句useDefaultWebProxy="true"讓他自動使用了代理。由此可見服務器上肯定設置了什么代理,因為這個ws是通過防火牆策略做跨網段訪問的,所以被自動列入了代理白名單,然而代理並不能真正訪問到這個網段,於是返回的其實是被代理阻止的信息:

<Html><Body><H1> 10.xx.xx.xx is prohibited by proxy.</H1></Body></Html>

難怪會解析出錯了,被耽誤了不少時間。

不管是WebService還是WCF都會遇到相似的問題。記下來以免忘記。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM