我有一个由部署在 azure 中的 ADFS 保护的 wcf 服务。我可以在我的控制台应用程序中使用该服务。但是当我不确定如何在 windows phone 7 应用程序中使用该服务时。在我的控制台应用程序中,我正在检索一个安全令牌并使用 CreateChannelWithIssuedToken 方法将该令牌传递给 channelfactory 对象。但是在 windows phone 应用程序中没有这种方法可以将令牌传递给 wcf 服务。谁能指导我解决这个问题?提前致谢。
2 回答
CreateChannelWithIssuedToken
是 WIF 程序集在 .NET 3.5/4.0 中添加的扩展方法(我相信 .NET 4.5 中的大部分内容现在已内置到 System.ServiceModel 命名空间中)。由于您不会在手机上使用此功能,因此您只能使用常规的 WCF 方法来创建和使用频道。
在处理 WinForms/WPF 应用程序时仍然是这种情况,但在这种情况下,您可以选择引入 WIF 程序集。尽管如此,这不是必需的,并且使用常规 WCF 类完全可以使用 ADFS 保护的服务。
Windows Phone 似乎支持这些东西,尽管有一些警告。查看扩展方法的实现,他们似乎并没有真正做任何花哨的事情:
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 开始,但恐怕我没有这样做的确切步骤。也许其他人会这样做,或者这可能会引导您朝着正确的方向前进。
本文展示了如何从 Silverlight 访问受 WIF 保护的 WCF 服务,我想这与您在手机上的操作几乎相同。
There is a training kit (http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=8396) example ACSAndWindowsPhone7 that may help here (I've not looked at it in detail). I know that Wade Wegner has a number of blog posts on ACS and WP7, but not sure if he's tackled ADFS specifically versus OAuth type mechanisms.