5

我需要从服务提供商处获取一些数据,并将我们的 .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);
            }
    }

错误:

请求失败,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;
    }

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

“对象”不包含“GetWebRequest”的定义

谁能告诉我如何将 HTTP 版本更改为 1.0,但仍然使用类似的代码(而不是构建我自己的肥皂包)来调用我的 web 方法?

我似乎找不到任何可以简单地注入到我的代码中的代码,如下行...

    ws.HttpVersion = HttpVersion.Version10;

谢谢

4

2 回答 2

11

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

<configuration>
    <system.net>
        <settings>
            <servicePointManager expect100Continue="false" />
        </settings>
    </system.net>
</configuration>
于 2013-03-07T11:56:59.710 回答
4

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

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

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

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

于 2012-07-17T04:05:04.100 回答