2009-09-02 159 views
2

我們編寫了一個WCF服務,部署在IIS上。我們選擇了集成Windows認證。服務無法在這種情況下使用,但是如果我們可以將IIS虛擬目錄的身份驗證方法設置爲WCF服務的「匿名」,那麼錯誤將消失。但是「匿名」對於我們的WCF服務是不可接受的。我們必須使用集成Windows身份驗證來驗證客戶端。任何人都知道如何解決這個問題?WCF服務,Windows身份驗證

由於提前,

阿希什

+0

你能顯示什麼配置文件顯示客戶端和wcf服務的配置嗎? – CSharpAtl 2009-09-02 13:48:48

回答

1

還有,你需要注意兩兩件事:

  1. 是您的配置一致:IIS,web.config中(的System.Web和WCF)
  2. 您的客戶是否發送Windows請求認證信息

它可能是第二個給你帶來問題的東西。 IIS日誌應該包含哪個用戶正在進行呼叫。

+0

其實,如果我允許集成Windows身份驗證,沒有匿名,然後客戶端窗口應用程序無法訪問服務本身,即使在服務器上,如果我瀏覽服務,它會告訴我以下錯誤 「此服務的安全設置需要'匿名'身份驗證但它不支持承載此服務的IIS應用程序。「 – Kasma 2009-09-03 13:18:07

5

你要做的幾件事情:

  • 取消選中匿名訪問從您的虛擬forlder和檢查集成的Windows安全性。
  • 創建以下綁定配置:

    <basicHttpBinding> 
    <binding name="Binding1"> 
        <security mode="TransportCredentialOnly"> 
         <transport clientCredentialType="Windows" /> 
        </security> 
    </binding> 
    </basicHttpBinding> 
    
  • 應用上面的配置爲你服務和MEX:

    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="Binding1" contract="IService"> 
    </endpoint> 
    
    
        <endpoint address="mex" binding="basicHttpBinding" bindingConfiguration="Binding1" contract="IMetadataExchange"> 
    </endpoint> 
    
    • 創建一個客戶端和使用的NetworkCredential來傳遞您的憑據:

       ServiceReference.MyClient proxy = new ServiceReference.MyClient(); 
           proxy.ClientCredentials.Windows.ClientCredential = new System.Net.NetworkCredential("MACHINENAME\\USERACCOUNT", "passwrd"); 
           proxy.YourServiceOperation(); 
      

還有其他的方法來設置用戶名密碼& indivdually但它並沒有在.NET 4.0中工作。 USERACCOUNT是WCF主機加入的域帳戶或LDAP。 如果服務器未加入域,則通過運行「lusrmgr.msc」在本地創建一個帳戶