Web クライアントから呼び出す ASMX Web サービス (ローカルホスト - WinXP IIS 5.1) があります。私の Web サービスは、別の ASMX Web サービスを使用する必要があります (Win 2003 サーバー IIS 6.0 上)。
「ハードコーディングされた」方法で Web サービス コードに資格情報を提供すると、次のようになります。
engineWSE.Credentials = new System.Net.NetworkCredential("myUser", "myPass", "myDomain");
...その後のリモート Web サービスの呼び出しは正常に機能します。
今、私はいくつかの初期テストで自分自身になりすまそうとしています。これについての私の最初の読書は、これが大きな主題になる可能性があることを私に教えてくれますが、ここに私が手始めにやったことがあります:
ローカルホストの WebClient サイトの仮想ディレクトリで、チェックされていない「匿名アクセス」
私の webclient サイトの web.config で、次のように設定しました: authentication mode="Windows" and identity impersonate="true"
リモート サービスを呼び出す必要がある Web サービスの Web メソッドで、次のように変更しました。
engineWSE.Credentials = System.Net.CredentialCache.DefaultCredentials;
これらの DefaultCredentials でリモート Web サービスが呼び出されると、次のエラーが発生します。
System.Web.Services System.Web.Services.Protocols.SoapException: サーバーは要求を処理できませんでした.--->
System.Net.WebException: HTTP ステータス 401 で要求が失敗しました: 権限がありません。
System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse (SoapClientMessage メッセージ、WebResponse 応答、ストリーム responseStream、ブール値の asyncCall) で
System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke (メソッド名の文字列、オブジェクト [] パラメーター) で
私が誤解して「なりすまし」を過度に単純化しようとしたのか、それともリモート Web サービスが 3 つの引数 (つまり、ユーザー名、パスワード、ドメイン) を持つ資格情報のみを受け入れるように配線されているのかはわかりません。