2012-01-06 21 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

相关问题