[英]Creating HTTP Header parameters in a SOAP interface in .Net
您能否告诉我如何在C#中创建SOAP HTTP参数。 我不是在谈论SOAP信封内的SOAP HEADER,而是HTTP头。 例如,我在下面的标题中有用户名和密码:
POST /company/addThing HTTP/1.1
Host: webservices.foo
Connection: Keep-Alive
User-Agent: PHP-SOAP/5.6.2
Content-Type: text/xml; charset=utf-8
SOAPAction: ""
Content-Length: 295
Username: userx
Password: passwordy
我可以使用SoapClient调用的stream_context参数在PHP中添加参数,但是我无法在.Net C#中找到在哪里做。
我添加了Web参考WSDL,它已经为Web服务自动创建了对象和方法,对此我感到很满意。
任何帮助,将不胜感激。
我在下面的答案中打了勾,但它仅适用于.Net 4.0及更高版本。 我没有提到的一件事是我正在使用Visual Studio 2008。
我使用的最终解决方案是将以下代码添加到自动生成的Reference.cs文件中:
protected override System.Net.WebRequest GetWebRequest(Uri uri)
{
System.Net.WebRequest request = base.GetWebRequest(uri);
request.Headers.Add("Username", "user");
request.Headers.Add("Password", "pass");
return request;
}
当您从WSDL添加Web参考时,它将为您生成用于调用服务的类,我们将其称为“ MyService”。 如果您为该类创建一个部分并将其包含在同一程序集中,则可以覆盖“ GetWebRequest”方法并直接添加标头。 这是一个例子:
public partial class MyService
{
private ConcurrentDictionary<string, string> requestHeaders = new ConcurrentDictionary<string, string>();
public void SetRequestHeader(string headerName, string headerValue)
{
this.requestHeaders.AddOrUpdate(headerName, headerValue, (key, oldValue) => headerValue);
}
protected override WebRequest GetWebRequest(Uri uri)
{
var request = base.GetWebRequest(uri);
var httpRequest = request as HttpWebRequest;
if (httpRequest != null)
{
foreach (string headerName in this.requestHeaders.Keys)
{
httpRequest.Headers[headerName] = this.requestHeaders[headerName];
}
}
return request;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.