2012-12-21 20 views
0

下面的SOAP調用可以正常使用我的憑據,但是當其他人使用調用WCF服務的.EXE時,我得到了401拒絕。我試圖找出通過的憑證是什麼。如何顯示在SOAP WCF調用中使用的用戶名憑證?

我可以看看IIS日誌,但我想以編程方式做到這一點,得益於:

public static Guid GetServerID(string serverName, string soapUrl) 
    { 
     Guid result; 
     try 
     { 
      Guid vServerId = new ControllerWS.Controller 
      { 
       Url = soapUrl, 
       Timeout = Config.SoapCallTimeOut, 
       Credentials = CredentialCache.DefaultCredentials 
      }.GetServerId(serverName); 
      result = vServerId; 

      //Console.WriteLine("CredentialCache.DefaultCredentials: " + CredentialCache.DefaultCredentials.ToString()); 
      //ICredentials Credentials = CredentialCache.DefaultCredentials.GetCredential() 
     } 
+0

不像論壇網站,我們不使用「謝謝」或「任何幫助表示讚賞」,或在[so]上簽名。請參閱「[應該'嗨','謝謝',標語和致敬從帖子中刪除?](http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be - 刪除 - 從帖子) –

回答

1

它真的取決於你使用的是什麼類型的驗證。當模擬Windows憑據,那麼你可以得到的用戶名是這樣的:

string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name 

如果使用普通的用戶名和密碼比這些值可以存儲請求頭中,讀這樣的:

MessageHeaders headers = OperationContext.Current.IncomingMessageHeaders; 
string userId = headers.GetHeader<Guid>("MyKey", "MyNamespce"); 
+0

謝謝,它正在調用NT AUTHORITY \ SYSTEM :(我希望它需要IIS應用程序池縮進。謝謝! – Max

0

您可以在服務器端使用IDispatchMessageInspector攔截完整的郵件,包括頭。從那裏您可以檢查正在傳入的憑證。

Here's a blog post概述如何記錄來自消息檢查器的完整消息,包括您需要執行的配置步驟。

+0

謝謝你,它正在呼籲作爲NT AUTHORITY \ SYSTEM :(我希望它會採用IIS應用程序池indentity.Email! – Max

+0

我採取了這一點,在SYSTEM下運行的另一個進程調用我的。 EXE使用SOAP調用調用Web服務 – Max