Visual Studio Tools For Applicationsを使用して、SOAPヘッダー(clientCredentialType = "UserName")でユーザー名とパスワードを送信する必要があるWCFを使用して記述されたサービスにInfopathアプリケーションを接続するのを支援しています。サービスはbasicHttpBindingを使用しています。
Infopath2010はVisualStudioTools 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ヘッダーにまったく含まれず、「メッセージのセキュリティを確認するときにエラーが発生しました」というエラーが表示されます。