2010-05-26 44 views
3

我有3個Web服務,全部位於同一臺服務器上。WCF Web Services - 同一臺服務器上的多跳模擬

我的客戶端呼叫服務A,它模擬客戶端調用服務B,一切都很好。

現在,我想模擬服務B(這是我的用戶名)的調用者來調用服務C.當我使用與以前相同的技術(AllowedImpersonationLevel = Impersonate,user.Impersonate())時,用戶不會傳遞給服務C.相反,服務C將用戶看作我在IIS下運行的用戶(這是一個UPN,而不是標準的NETWORK SERVICE帳戶)。

有什麼特別的我需要做得到這個工作?這是代表團的問題嗎? (我認爲這不會是委派,因爲它們都在同一臺服務器上)

謝謝!

回答

0

在這種情況下您需要授權。您需要的配置是ImpersonationLevel.Delegation(在配置或代碼中設置)。查看關於codeplex的WCF安全指南,它是一個非常好的來源。在實現委派時要小心,特別是在生產環境中,要求不僅僅是在配置文件中選擇正確的選項。您需要確保您連接的應用程序,例如SQL服務器)配置爲進行委派,並且在活動目錄等內滿足某些基礎結構要求,例如服務主體名稱(SPN)。

0

您可以嘗試在服務C

打開ASP.Net兼容性在Web.cofig

<system.web> 
    <identity impersonate="true"/> 
    <authentication mode="Windows"/> 
</system.web> 
<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
</system.serviceModel> 

在服務類

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public class Service : IService 
{ 
    public string ExecuteRequest(string xmlRequest) 
    { 
     IRequestManager requestManager = new RequestManager(); 
     return requestManager.ProcessRequest(xmlRequest); 
    } 

} 
0

我本來期望有使用因爲你跨越了進程邊界兩次。你嘗試過TokenImpersonationLevel.Delegation嗎?

相關問題