使用“全局Http设置”验证肥皂

时间:2013-11-27 16:45:29

标签: .net authentication soap wsdl http-headers

我必须从C#.NET连接到SOAP服务,但该服务仅接受带有http身份验证标头的请求。

似乎(基于我的googleing到目前为止)通过Http头的身份验证不是SOAP的标准,但我无法对SOAP服务进行任何更改。

注意:我不是在谈论SOAP标头。

我可以设置http身份验证并使用SoapUI发出成功请求,如下所示:

Working SoapUI request, using "Username" and "Password" in the Authorisation tab

我可能错了SoapUI在幕后做的事情 - 这是http认证吗?

我已经将WSDL导入到我的Visual Studio项目中,并且可以尝试发出请求但是我得到“401 - 未经授权(HTTP请求未经授权使用客户端身份验证方案'匿名'。)”当然是错误。

我想以这样的方式调用服务:

    public List<string> GetVinsForUser(string customerId)
    {
        var client = new CustomerService.VehicleClient();

        // client.HttpHeaders.Add("username", "SomeUser");
        // client.HttpHeaders.Add("password", "SomePassword");

        var result = client.findCustomerPlusVehicles(customerId);

        return result.Vehicles.ToList();
    }

到目前为止,我看到的所有相关文章似乎都暗示,对于SOAP的.NET实现,没有像这样的简单属性。

我知道我可以将soap xml数据发布到端点,手工构建整个webrequest,但我真的不想破解这个!

是否可以通过扩展/覆盖生成的Client类的行为来启用此类身份验证?

1 个答案:

答案 0 :(得分:0)

不要试图直接修改soap标头,而是让.net修改标题:

// windows credential
client.ClientCredentials.Windows.ClientCredential = new NetworkCredential("yourUsername", "yourPassword", "yourDomain.com");

// you can also try this
client.ClientCredentials.UserName.UserName = "yourUsername";
client.ClientCredentials.UserName.Password = "yourPassword";