我正在帮助某人使用 Visual Studio Tools For Applications 将 Infopath 应用程序连接到使用 WCF 编写的服务,该服务需要在 SOAP 标头 (clientCredentialType="UserName") 中发送用户名和密码。该服务正在使用 basicHttpBinding。
Infopath 2010 依赖于 Visual Studio Tools For Applications 2005,因此我不得不添加“Web 引用”而不是“服务引用”。我以前从来没有这样做过,试图弄清楚如何做到这一点变得非常有问题。
在服务参考中,我只是说:
service.Credentials.UserName.UserName = "username";
service.Credentials.UserName.Password = "password";
但是,当使用 Web 引用时,Credentials 属性的行为会有所不同,我无法让它自动在 SOAP 标头中传递用户名和密码。
我尝试了一些事情,包括这些没有运气:
MyService service = new MyService();
CredentialCache cache = new CredentialCache();
// I've tried "Basic" and string.Empty as well in the place of "UserName"
cache.Add(new Uri(service.Url), "UserName", new NetworkCredential("username", "password"));
service.Credentials = cache;
service.PreAuthenticate = true;
service.MyMethod();
和
MyService service = new MyService();
service.Credentials = new NetworkCredential("username", "password");
service.MyMethod();
但完全没有运气。在服务上记录整个消息,用户名和密码根本不包含在 SOAP 标头中,我收到以下错误:“验证消息安全性时发生错误。”