如何在使用SOAP Web服务时在C#中设置密码类型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在使用SOAP Web服务时在C#中设置密码类型相关的知识,希望对你有一定的参考价值。

我试图在我的C#控制台应用程序中使用第三方SOAP Web服务。我尝试了两种不同的传递凭证的方式,如下所示。

//Method 1 - passing security credentials
myCardService.Credentials = new System.Net.NetworkCredential("username", 
"password");

//Method 2 - passing security credentials
System.Net.CredentialCache myCredentials = new System.Net.CredentialCache();
NetworkCredential netCred = new NetworkCredential("username", "password");
myCredentials.Add(new Uri(myCardService.Url), "Basic", netCred);
myCardService.Credentials = myCredentials;

在这两种情况下,我都遇到了这个例外:

System.Web.Services.Protocols.SoapHeaderExceptions:SecurityHeader中的错误:提供了无效的安全令牌

当我尝试使用SOAP UI来使用服务时,我也遇到了同样的错误。但是,当我在工具的“属性”窗口中创建WSS-Password Type = PasswordText时,它才起作用。我没有看到任何方法在C#代码中的凭证对象中进行此设置。任何帮助是极大的赞赏。

答案

我的理解是,在您定义服务绑定到身份验证类型之后。

binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;

定义身份验证类型后,您将创建Web服务客户端并执行以下操作:

client.ClientCredentials.Username.Username = networkCredential.Username;
client.ClientCredentials.Password.Password = networkCredential.Password;

这应该是传递这些凭据的适当方式。

另一答案

https://www.microsoft.com/en-us/download/details.aspx?id=14089安装WSE 3.0并将Web引用从System.Web.Services.Protocols.SoapHttpClientProtocol手动更改为Reference.cs文件中的Microsoft.Web.Services3.WebServicesClientProtocol后,问题得以解决。

以上是关于如何在使用SOAP Web服务时在C#中设置密码类型的主要内容,如果未能解决你的问题,请参考以下文章

如何在流动客户端主题时在C#HttpClient中设置OIDC / OAuth承载令牌

如何在运行WSL时在Windows中设置VS代码调试?

如何在运行时在由 android studio 创建的导航抽屉中设置默认片段

使用 Gulp 时如何在 IDEA 中设置 Chrome 识别的断点?

如何在运行时在 org.jboss.logging 中设置日志记录

如何在开始时在表格中设置分页的第 2 页