我已經創建了簡單的.NET Web服務(ASMX),我從我的.NET Web應用程序調用。服務和Web應用程序都使用Windows驗證。使用Windows身份驗證從C#應用程序調用ASMX服務?
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始終是假的,如果是相關的。我在這裏錯過了什麼。我只需要獲取運行控制檯應用程序的Windows用戶用戶名即稱爲Web服務。我曾嘗試將webSrvc的憑據設置爲ClientCache默認憑據,但這並不能解決問題。
更新:我不知道這是否有用,但我瞭解到,如果我使用Environment.UserName,它會給「NETWORK_SERVICE」,然後如果我啓用模擬,它會給「IUSR_ [host_name]」 。看來我只是錯過了一些非常簡單的事情。我只想獲得當前正在運行Windows應用程序(調用Web服務)的Windows用戶。
我使用默認憑據,因爲我不知道公司中每個用戶的密碼。由於我使用禁用匿名訪問的Windows身份驗證,因此不應該這樣工作。 – dave823 2012-07-24 20:27:46
「因爲我使用禁用匿名訪問的Windows身份驗證,所以不應該這樣工作」。不,實際上。您使用的代碼不會將憑據「傳遞」給您的Web服務對象。它在瀏覽器中工作,因爲這是瀏覽器製造商(MS)打開的行爲。但是,默認情況下,您的Windows窗體應用程序不會將所運行的憑據傳遞給Web服務。你必須明確地設置它。 – Richthofen 2012-07-24 20:56:55
感謝您的意見。在您的代碼示例中,我仍然不明白我是如何獲得用戶密碼以傳遞到網絡憑據的。我可以從Windows身份獲取用戶名和域名,但密碼又如何?另外,我注意到您的代碼使用「基本」身份驗證。如果將IIS Web應用程序配置爲「集成Windows身份驗證」,這會工作嗎? – dave823 2012-08-29 18:56:37