2

.NET Web アプリケーションから呼び出す単純な .NET Web サービス (ASMX) を作成しました。サービスと Web アプリはどちらも Windows 認証を使用します。

com.mydomain.MyWebService webSrvc = new com.mydomain.MyWebService();
string output = webSrvc.MyServiceMethod();

現在、C# で Windows アプリを作成しており、そこから同じ Web サービスを呼び出したいと考えています。プロジェクトの Web 参照をサービスに追加しました。サービスの Web メソッドを問題なく呼び出すことができます。問題は、Web メソッド内で、ユーザーの Windows ユーザー名を取得しようとしていることです。

string username = User.Identity.Name; //always blank

これは、Web アプリから Web サービスを呼び出すと機能しますが、Windows アプリから呼び出すと、常に空白が返され、関連する場合は User.Identity.IsAuthenticated が常に false になります。ここで何が欠けていますか。Web サービスを呼び出したコンソール アプリを実行している Windows ユーザーのユーザー名を取得するだけです。webSrvc の資格情報を ClientCache の既定の資格情報に設定しようとしましたが、問題は解決しません。

更新: これが役立つかどうかはわかりませんが、Environment.UserName を使用すると「NETWORK_SERVICE」が返され、偽装を有効にすると「IUSR_[host_name]」が返されることがわかりました。本当に単純なものが欠けているようです。Windowsアプリ(Webサービスを呼び出す)を実行している現在のWindowsユーザーを取得したいだけです。

4

2 に答える 2

6

設定

UseDefaultCredentials = true; 

これにより、現在のユーザー(または現在のプロセスが実行されているアカウント)が認証されます

于 2012-12-05T10:31:39.357 に答える
2

Web サービス オブジェクトを呼び出す前に、ネットワーク資格情報を Web サービス オブジェクトに渡していますか? 何かのようなもの:

NetworkCredential credentials = new
NetworkCredential(UserName,SecurelyStroredPassword,Domain);

// Add the NetworkCredential to the CredentialCache.
credentialCache.Add(new Uri(webSrvc.Url), 
                   "Basic", credentials);

引用元: http://msdn.microsoft.com/en-us/library/bfazk0tb.aspx

基本的に、Web サービスが Web アプリから呼び出されると、すべての Cookie とセッション情報が既に保持されています。スタンドアロン アプリケーションを作成すると、Cookie やフォーム データなどにアクセスできなくなります。

于 2012-07-10T18:57:12.757 に答える