2013-06-29 51 views
0

我有一個網站,我從哪裏發送郵件給我的辦公室的成員希望Windows登錄Web服務中的用戶名C#asp.net

此郵件有一個yes no按鈕。

上是的點擊/否按鈕我調用Web服務,我是沒有鏈接看起來有點像這個

<a href="http://xxxxx/xxxxx/votCatWSer.asmx/takevotingOpt?yesNo=yes&sNo=1">yes</a> 

現在,用戶即我的辦公室的工作人員會登錄他們的系統中打開他們的視野發現此郵件,然後點擊它。

點擊後,我的web服務中的takevotingOpt方法會被調用。在這個方法中,我想知道,這個調用來自哪個用戶。 這樣我可以保持像某某用戶數據庫記錄投票是/否

說的如他們都在我的組織一兩個成員和B

A的窗口登錄ID爲 「AaLoginId」 和

B的窗口登錄ID爲 「BbLoginId

A和B接收郵件中有上面提到的鏈接。當A單擊是/否鏈接我的網站的方法應該給我的登錄ID即「AaLoginId」。我得到這個之後,我在A數據庫中輸入了一個條目,因爲A投了贊成票。

我曾嘗試下面的事情在我的網絡服務來獲取用戶名,但沒有用,請幫助。

試過這個東西來獲取windows登錄用戶名。

 //string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; 
     //Uri uri = new Uri("http://tempuri.org/"); 
     //ICredentials credentials = CredentialCache.DefaultCredentials; 
     //NetworkCredential credential = credentials.GetCredential(uri, "Ntlm"); 
     ////userName = credential.UserName; 
     //userName = User.Identity.Name; 
     //userName= System.Threading.Thread.CurrentPrincipal.Identity.Name; 
     //userName = Context.Request.ServerVariables["LOGON_USER"].ToString(); 
     //userName = HttpContext.Current.User.Identity.Name.ToString(); 

我去我INETMGR,以驗證和啓用Windows身份驗證我的託管網絡服務,現在它做什麼,我想(用戶名= User.Identity.Name;),但它會打開一個瀏覽器窗口,並要求Windows用戶ID和密碼我不希望它應該拿起沒有登錄窗口。

請幫助或建議任何其他方法來實現這一點。

+0

我去我INETMGR,以驗證和啓用Windows身份驗證我的託管網絡服務現在它做我想要的,但它打開一個瀏覽器窗口,並要求Windows用戶名和密碼我不希望它應該拿起沒有登錄窗口。 –

+0

由於您有通過用戶標識符發送郵件的代碼(對嗎?)將用戶標識嵌入到他們單擊的URL中。 ?yesno = yes&userid = AaLoginid – dkackman

+0

@dkackman感謝您的關注,但..如果我這樣做,用戶A將郵件轉發給用戶C,那麼我不會得到正確的記錄。 –

回答

0

使用Environment.UserName

這裏的MSDN文檔。 http://msdn.microsoft.com/en-us/library/system.environment.username.aspx

編輯 - 要檢索的所有用戶登錄到當前系統,看看這個問題/答案 - Logoff interactive users in Windows from a service

它顯示了一種使用WMI,並通過系統DLL來獲取登錄的用戶的列表目前的系統(可能包括也可能不包括服務帳戶,我自己也沒有嘗試過)。

編輯 - 使用集成的安全將工作你想達到什麼目的,但可以是一個有點棘手的大公司設置。要擺脫登錄提示,Internet Explorer會自動向「Intranet區域」中的站點進行身份驗證,但不會自動向「Internet區域」中的站點進行身份驗證。確保您的Web服務URL是基於Intranet的,即http://myserver/,而不是基於Internet的i。除非用戶在同一個域內。如果不是,請讓用戶將「* .mycorp.com」添加到Intranet區域。 FireFox具有類似的配置,特定站點必須「可信」才能自動進行身份驗證。

+0

謝謝但它返回「系統」作爲用戶名 –

+0

然後,您可能運行在「系統」用戶帳號。 –

+0

不,我用我的用戶名和密碼登錄到我的系統,如果我從我的系統調用Web服務,那麼它應該顯示我的登錄ID –

1

你需要打開windows身份驗證的Web服務和IIS,那麼你應該能夠看到Request對象來獲取用戶

+0

你是對的。在我的問題中,我提到了這種方法..唯一的問題是,它會打開一個瀏覽器窗口並彈出用戶憑據。我不想讓我們彈出瀏覽器窗口打開。我想知道如何捕捉他的用戶名,而不用問他是否已經登陸系統。我不會混淆你。 –

+0

在同一個域上的用戶?他們是否已經登錄到域名?如果是這樣,那麼他們不應該獲得憑據的請求,你確定基本和摘要認證在iis中被關閉了嗎?並在網絡配置你已經設置驗證窗口?他們也有權訪問asmx或svc文件所在的目錄嗎? – jfin3204

+0

可以請你在域名部分解釋更多。 iis中關閉了基本身份驗證和摘要身份驗證。是的,在web配置我已經設置了身份驗證到Windows。請解釋如何查找用戶是否可以訪問目錄。所有用戶來自同一家公司,服務器屬於同一家公司。是的,它只要求第二次我點擊鏈接一次憑據,然後它不要求憑據,如果我關閉瀏覽器,再次點擊它要求的憑據,我認爲你會解決我的問題。感謝您的時間 –

相關問題