如何更改我的Web方法调用的http版本以停止505错误?

Kar*_*arl 5 .net web-services http version http-status-code-505

我需要从服务提供商处获取一些数据,并将我们的.net应用程序配置为指向其托管的Web服务以获取数据.使用下面的代码,当调用web方法时(ws.DoTransfer)我得到以下错误...

    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);
            }
    }
Run Code Online (Sandbox Code Playgroud)

错误:

HTTP状态505请求失败:HTTP版本不受支持.

我被告知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;
    }
Run Code Online (Sandbox Code Playgroud)

...但是当我尝试这个时,GetWebRequest后面base.用红色加下划线并且有错误......

'Object'不包含'GetWebRequest'的定义

任何人都可以告诉我如何将HTTP版本更改为1.0,但仍然使用类似的代码(而不是构建我自己的soap数据包)来调用我的Web方法?

我似乎无法找到任何类型的代码,我可以简单地注入我的代码,看起来像以下行...

    ws.HttpVersion = HttpVersion.Version10;
Run Code Online (Sandbox Code Playgroud)

谢谢

小智 11

将Expect100Continue更改为false.您可以在app的配置文件中执行此操作,添加以下内容:

<configuration>
    <system.net>
        <settings>
            <servicePointManager expect100Continue="false" />
        </settings>
    </system.net>
</configuration>
Run Code Online (Sandbox Code Playgroud)


小智 4

如果您无法覆盖GetWebRequest,则您正在使用 WCF 服务而不是 Soap Web 服务。 WCF 不支持 HTTP/1.0

创建允许您使用 HTTP/1.0 协议的 Web 服务引用

  • 右键单击项目并选择添加服务。
  • 单击高级按钮
  • 单击添加 Web 参考

如果您使用与以前相同的命名空间,则不需要更改代码