繁体   English   中英

在.Net中的SOAP接口中创建HTTP标头参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM