2012-01-06 48 views
4

我需要從服務提供商處獲取一些數據,並配置我們的.net應用程序以指向其託管的Web服務以獲取數據。使用下面的代碼,當調用Web方法(ws.DoTransfer)我得到以下錯誤...如何更改Web方法調用的http版本以停止505錯誤?

private void DoTransferLocal() 
    { 
      Version version = new Version(); 
      string error = string.Empty; 
      try 
      { 
        RemoteService ws = new RemoteService(); 
        ServicePoint spm = ServicePointManager.FindServicePoint(new Uri(ws.Url)); 
        spm.Expect100Continue = true; 
        version = spm.ProtocolVersion; 
        ws.Credentials = credentials; 
        ws.PreAuthenticate = true; 
        RemoteResult result = ws.DoTransfer(); 
        MessageBox.Show("Result = " + result.transferStatus); 
      } 
      catch (Exception ex) 
      { 
        error = ex.Message; 
      } 
      finally 
      { 
        MessageBox.Show(version.ToString() + Environment.NewLine + error); 
      } 
    } 

錯誤:

The request failed with HTTP status 505: HTTP Version Not Supported.

我已經告訴的HTTP需求的版本爲1.0,而我的是1.1

我讀過幾本關於谷歌的職位,並看到建議覆蓋GetWebRequest方法,如下所示...

protected override System.Net.WebRequest GetWebRequest(Uri uri) 
    { 
      System.Net.HttpWebRequest request = base.GetWebRequest(uri) as System.Net.HttpWebRequest; 
      request.ProtocolVersion = System.Net.HttpVersion.Version10; 
      return request; 
    } 

...但是當我嘗試這一點,GetWebRequestbase.後有紅色下劃線,並有錯誤...

'Object' does not contain a definition for 'GetWebRequest'

誰能告訴我怎麼改HTTP版本爲1.0,但仍使用類似的代碼(而不是建立自己的soap包)來調用我的web方法?

我似乎無法找到任何類型的代碼,我可以簡單地注入我的代碼看起來像下面的行...

ws.HttpVersion = HttpVersion.Version10; 

感謝

回答

4

如果無法覆蓋GetWebRequest,您正在使用WCF服務而不是Soap Web服務。 WCF不支持HTTP/1.0

要創建一個Web服務的參考,讓您使用HTTP/1.0協議

  • 右鍵單擊項目並選擇添加服務。
  • 單擊高級按鈕
  • 單擊添加Web引用

如果像以前一樣使用相同的命名空間,沒有更改代碼應要求

+0

我與Cisco AXL webservice具有相同的確切問題。我已經使用wsdl.exe來編譯teh * wsdl和* xsd文件。我按照上面的步驟,但我不能指向它的wsdl文件??!它表示訪問路徑被拒絕,我試圖運行visaul工作室作爲管理員仍然沒有運氣 – laitha0 2013-07-10 20:11:32

11

更改Expect100Continue爲false。你可以在你的應用程序的配置文件中添加以下內容:

<configuration> 
    <system.net> 
     <settings> 
      <servicePointManager expect100Continue="false" /> 
     </settings> 
    </system.net> 
</configuration> 
+0

這不會導致它使用HTTP 1.0,但它確實允許AXL工作。 – dodexahedron 2014-07-11 16:21:00

相關問題