2010-08-18 31 views
0

客戶端代理下面是我迄今所做的:編程方式創建一個WIF保護的WCF服務

1)創建了一個ASP.NET MVC依賴方申請,並ADFS V2.0獲取它。這工作。

2)使用ASP.NET網站的Claims-Aware服務模板創建WCF服務。我已將服務的ASP.NET兼容性轉爲開啓狀態,因爲服務不會以其他方式激活。我已將所述服務的界面移至「SharedContracts」程序集。

3)使用「添加STS」引用,也指向我的ADFS服務器,將WCF服務設置爲依賴方。

4)將ADFS服務器配置爲包含WCF服務作爲依賴方併發出LDAP聲明。

我現在想要做的是與使用ActAs的服務交談。換句話說,當有人從ASP.NET MVC站點用滿有聲明的令牌(記住MVC站點是一個依賴方)擊中HomeController.Index()時,我希望此方法以編程方式創建一個客戶端代理並調用單個我使用WCF服務(一種名爲「HelloClaim」的方法,它與聲明感知服務模板附帶的庫存方法幾乎相同)的服務方法。

這裏是到目前爲止,我已經得到了代碼:

[ValidateInput(false)] 
public ActionResult Index() 
{ 
    SecurityToken callerToken = null; 

    IClaimsPrincipal claimsPrincipal = Thread.CurrentPrincipal as IClaimsPrincipal; 
    if (claimsPrincipal != null) 
    { 
    foreach (IClaimsIdentity claimsIdentity in claimsPrincipal.Identities) 
    { 
     if (claimsIdentity.BootstrapToken is SamlSecurityToken) 
     { 
     callerToken = claimsIdentity.BootstrapToken; 
     break; 
     } 
    } 

    string baseAddress = "http://khoffman2/SecureServices/Service.svc"; 

    ChannelFactory<IHelloClaim> factory = new ChannelFactory<IHelloClaim>(new WebHttpBinding(), new EndpointAddress(baseAddress)); 
    factory.ConfigureChannelFactory<IHelloClaim>(); 
    IHelloClaim hello = factory.CreateChannelActingAs<IHelloClaim>(callerToken); 

    string result = hello.HelloClaim(); 
    ViewData["Message"] = "Welcome to ASP.NET MVC!"; 
    } 



    return View(); 
} 

當我嘗試調用的方法,我收到以下錯誤信息:

手冊尋址是這家工廠啓用,因此所有發送的消息必須預先編址。

我很確定我只是沒有足夠的配置綁定和端點編程。如果你們之前有過這樣做,或者你知道如何去做,我希望能夠實現這一目標。

底線是我只是使用基本的身份委託方案 - 唯一的區別是我沒有使用生成的客戶端代理。

回答