CreateChannelWithIssuedToken 是 WIF 程序集在 .NET 3.5/4.0 中添加的扩展方法(我相信 .NET 4.5 中的大部分内容现在已内置到 System.ServiceModel 命名空间中)。由于您不会在手机上使用此功能,因此您只能使用常规的 WCF 方法来创建和使用频道。
在处理 WinForms/WPF 应用程序时仍然是这种情况,但在这种情况下,您可以选择引入 WIF 程序集。不过,这不是必需的,并且使用常规 WCF 类完全可以使用 ADFS 保护的服务。
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;
}
verify 方法只是执行一些诊断并抛出异常(例如,如果未设置端点)。 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 服务,我想这与您在手机上的操作几乎相同。