我必须从C#.NET连接到SOAP服务,但该服务仅接受带有http身份验证标头的请求。
似乎(基于我的googleing到目前为止)通过Http头的身份验证不是SOAP的标准,但我无法对SOAP服务进行任何更改。
注意:我不是在谈论SOAP标头。
我可以设置http身份验证并使用SoapUI发出成功请求,如下所示:
我可能错了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类的行为来启用此类身份验证?
答案 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";