2012-07-10 39 views
2

我已經創建了簡單的.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用戶。

回答

2

在調用它之前是否將網絡憑證傳遞給了您的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和session信息堅持圍繞。當你寫一個獨立的應用程序將無法訪問餅乾,表單數據等

+0

我使用默認憑據,因爲我不知道公司中每個用戶的密碼。由於我使用禁用匿名訪問的Windows身份驗證,因此不應該這樣工作。 – dave823 2012-07-24 20:27:46

+0

「因爲我使用禁用匿名訪問的Windows身份驗證,所以不應該這樣工作」。不,實際上。您使用的代碼不會將憑據「傳遞」給您的Web服務對象。它在瀏覽器中工作,因爲這是瀏覽器製造商(MS)打開的行爲。但是,默認情況下,您的Windows窗體應用程序不會將所運行的憑據傳遞給Web服務。你必須明確地設置它。 – Richthofen 2012-07-24 20:56:55

+0

感謝您的意見。在您的代碼示例中,我仍然不明白我是如何獲得用戶密碼以傳遞到網絡憑據的。我可以從Windows身份獲取用戶名和域名,但密碼又如何?另外,我注意到您的代碼使用「基本」身份驗證。如果將IIS Web應用程序配置爲「集成Windows身份驗證」,這會工作嗎? – dave823 2012-08-29 18:56:37

6

設置

UseDefaultCredentials = true; 

這將驗證的currentuser(或當前運行進程的帳戶)

相關問題