0

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ヘッダーにまったく含まれず、「メッセージのセキュリティを確認するときにエラーが発生しました」というエラーが表示されます。

4

2 に答える 2

1

答えは、.Net 2.0 から自動的に実行できないということです。

于 2013-02-11T16:21:25.517 に答える
0

WCF が ASMX に取って代わったのには理由があります。セキュリティ標準のサポートもその 1 つです。

VSTA を使用している場合は、COM オブジェクトを使用できると思います。.NET 3.5 (.NET 2.0 SP2 といくつかの追加ライブラリ) を使用して COM オブジェクトを作成できます。この COM オブジェクトは、WCF サービス リファレンスを使用してサービスを利用できますが、COM のみを公開します。COM オブジェクトを使用できるコードはすべて、「プロキシ オブジェクト」を使用できます。

于 2013-02-11T16:26:21.457 に答える