.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ユーザーを取得したいだけです。