2012-03-02 49 views
0

我有一個由部署在Azure中的ADFS保護的wcf服務。我可以在我的控制檯應用程序中使用該服務。但是當我不確定如何在windows phone 7應用程序中使用該服務時。 在我的控制檯應用程序中,我正在檢索安全令牌並使用CreateChannelWithIssuedToken方法將該令牌傳遞給channelfactory對象。但在Windows Phone應用程序中沒有將令牌傳遞給wcf服務的方法。任何人都可以在這個問題上指導我? 在此先感謝。在Windows Phone應用程序中使用由adfs保護的wcf服務

回答

0

有一個培訓工具包(http://www.microsoft.com/download/en/details.aspx?displaylang=en & id = 8396)示例ACSAndWindowsPhone7可能有幫助(我沒有看過它詳細)。我知道Wade Wegner在ACS和WP7上有許多博客文章,但不確定他是否專門針對OAuth類型機制處理ADFS。

1

CreateChannelWithIssuedToken是由.NET 3.5/4.0中的WIF程序集添加的擴展方法(我相信.NET 4.5現在大部分內容都已內置到System.ServiceModel名稱空間中)。由於您不會在手機上使用此功能,因此您無法使用常規的WCF方法來創建和使用頻道。

上的WinForms/WPF應用程序工作時,儘管在這種情況下,你必須把在WIF組件的選項這仍是如此。儘管如此,它並不是必需的,而且使用ADFS保護的服務對於常規的WCF類也是完全可行的。

的Windows Phone似乎支持這東西,雖與some caveats。縱觀擴展方法的實現,它似乎並不像他們做任何事情都花哨真:

public static T CreateChannelWithIssuedToken<T>(this ChannelFactory<T> factory, SecurityToken issuedToken) 
{ 
    return ChannelFactoryOperations.CreateChannelWithParameters<T>(factory, new FederatedClientCredentialsParameters 
    { 
     IssuedSecurityToken = issuedToken 
    }); 
} 

public static T CreateChannelWithParameters<T>(ChannelFactory<T> factory, FederatedClientCredentialsParameters parameters) 
{ 
    ChannelFactoryOperations.VerifyChannelFactory<T>(factory); 
    T t = factory.CreateChannel(); 
    ((IChannel)t).GetProperty<ChannelParameterCollection>().Add(parameters); 
    return t; 
} 

的驗證方法只執行一些診斷,並拋出異常(例如,如果端點不是組)。 ChannelParameterCollection在System.ServiceModel.Channels中定義,並且在Silverlight/WP7中受支持。而FederatedClientCredentialsParameters沒什麼特別可以:

public class FederatedClientCredentialsParameters 
{ 
    public SecurityToken ActAs (get; set;) 
    public SecurityToken OnBehalfOf (get; set;) 
    public SecurityToken IssuedSecurityToken (get; set;) 
} 

好像你應該能夠創建一個頻道,正常使用的令牌有了它,甚至從WP7,但我怕我沒有確切的步驟這樣做。也許別人會這樣做,或者這可能會讓你朝着正確的方向前進。

This文章顯示瞭如何從Silverlight訪問受WIF保護的WCF服務,我想這與您在手機上的操作方式幾乎完全相同。

相關問題