2009-06-10 78 views
0

我有一個小的WCF webservice與內置的WCF服務主機一起工作,並由Visual Studio 2008內置的開發Web服務器託管。IIS託管的WCF服務可以配置爲Windows驗證和匿名嗎?

我這些託管環境我依靠WCF測試客戶端來調用服務方法。

現在我遇到問題,我測試的下一階段:

我有它託管在IIS 5.1我的WinXP dev的機器,我想,也許這個問題是我不能繼續使用WCF測試客戶端了。這是發生了什麼:

案例1:「匿名訪問」被選中(啓用)

WCF測試客戶端UI來正確,露出的WebMethods和Invoke按鈕。 然而,當我單擊INVOKE時,它無法連接到需要Windows身份驗證的後端數據存儲(第三方產品)。我可以發佈我從product.DLL得到的錯誤,但我認爲它不相關。

案例2: 「匿名訪問」 未覈對(禁用)

WCF測試客戶端UI失敗,甚至正確初始化。我對此的研究告訴我,MEX(WS-Metadata Exchange)需要「匿名訪問」和(顯然)WCF測試客戶端需要MEX。這裏是正在返回的錯誤的關鍵片斷:

Error: Cannot obtain Metadata from http://localhost/wcfiishost 
The remote server returned an error: (401) Unauthorized.HTTP GET Error 
URI: http://localhost/wcfiishost  
There was an error downloading 'http://localhost/wcfiishost'.  
The request failed with the error message: 
Security settings for this service require 'Anonymous' Authentication but it is not enabled for the IIS application that hosts this service 

的是大量的綁定選項,信息安全等之類的東西我真的不明白的解釋。 (a)因爲我知道我的WCF webservice務必配置爲使用Windows身份驗證,所以我得出結論:當我託管我的WCF測試客戶端時,我不能繼續使用WCF測試客戶端。 IIS中的服務。它已經有效地超過了它對我有用。我只需要花時間編寫一個Web客戶端,因爲沒有匿名的情況下,WCFTestClient不會工作。

(或)

(B)可以使用WCF測試客戶端,如果它和託管服務的propertly配置(我只是不知道什麼特殊配置技術是這個)。

這是正確的嗎?是時候停止使用WCFTestClient還是有兩種方法可以使用它?預先感謝您的建議。

編輯:09年6月11日

有什麼事我可以提供幫助別人幫助我在這個問題上?

+0

PS:這是你使用你的服務綁定?你可以試試「basicHttpBinding」(如果你還沒有使用它)? – 2009-06-11 17:13:35

回答

0

當我設置這個問題的標題/主題,在這裏達到了一個死衚衕,我在MSDN論壇開闢了同一個問題有不同側重的標題(問題的內容基本上是相同的)。

對我來說,真正的問題是如何在IIS中使用WCFTestClient沒有匿名身份驗證被設置(因爲我的服務需要集成Windows身份驗證只)。

墨西哥顯然需要匿名和默認WCFTestClient似乎需要墨西哥。關鍵似乎在於我能仔細地處理web.config文件。

不管怎樣,我知道了這個工作的web.config以下(the MSDN link is here

<?xml version="1.0"?> 
<configuration> 

  <endpoint address="" 
         binding="wsHttpBinding" 
         bindingConfiguration="wsBindingConfig" 
         contract="sdkTrimFileServiceWCF.IFileService"> 

           <identity> 
            <dns value="localhost" /> 
           </identity> 
      </endpoint> 

      <endpoint address="basic" 
         binding="basicHttpBinding" 
         bindingConfiguration="bindingConfig" 
         contract="sdkTrimFileServiceWCF.IFileService" /> 
     </service> 
    </services> 

    <bindings> 
     <basicHttpBinding> 
      <binding name="bindingConfig"> 
       <security mode="TransportCredentialOnly"> 
        <transport clientCredentialType="Windows"/> 
       </security> 
      </binding> 
     </basicHttpBinding> 

     <wsHttpBinding> 
      <binding name="wsBindingConfig"> 
       <security mode="Transport"> 
        <transport clientCredentialType="Windows"/> 
       </security> 
      </binding> 
     </wsHttpBinding> 
    </bindings> 

 </serviceBehaviors> 
    </behaviors> 

0

我只是試圖有相同的設置 - 但在我的情況下,一切似乎工作得很好。

  • ASP。NET網站
  • WCF服務,使用basicHttpBinding的一種在以匿名=啓用和Windows身份驗證的所有
  • IIS應用程序的任何特殊設置=啓用(同時打開)

我可以很容易地與連接到它WcfTestClient並檢索元數據,然後我可以調用它,沒問題。

在我的服務功能,我請檢查當前用戶是否是已知用戶與否,它正確地識別爲一個Windows身份驗證的用戶:

ServiceSecurityContext ssc = ServiceSecurityContext.Current; 

    if (ssc.IsAnonymous) 
    { 
     return "anonymous user"; 
    } 
    else 
    { 
     if(ssc.WindowsIdentity != null) 
     { 
      return ssc.WindowsIdentity.Name; 
     } 

     if (ssc.PrimaryIdentity != null) 
     { 
      return ssc.PrimaryIdentity.Name; 
     } 
    } 

    return "(no known user)"; 

我真的不知道,我還有什麼檢查(除了我在Vista上與IIS7)。你有可能包含這個代碼來檢查你的服務代碼中的用戶嗎?只是看到....

馬克

0

馬克,你的設置甚至不接近約翰斯。

約翰用使用Windows憑據消息模式運輸WsHttpBinding的。 Windows身份驗證未與BasicHttpBinding一起使用。此外,John禁用了匿名身份驗證,這就是元數據交換(mex)失敗的原因。

通話甚至不會到達服務端功能裏面,因爲我們得到一個401錯誤(未授權),當我們試圖調用。

只知道約翰,我也有同樣的問題,我想每個端點莫名其妙地設置單獨的綁定。希望這會起作用。

+0

我們已經爲mex使用了不同的綁定,所以不要這個想法。我目前也處於虧損狀態。 – 2009-06-27 01:45:23

相關問題