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 服务引用
如果您使用与以前相同的命名空间,则不需要更改代码
| 归档时间: |
|
| 查看次数: |
8188 次 |
| 最近记录: |