我有一个 Silverlight 客户端应用程序,它登录到 STS 并获得一组索赔作为回报。我使用 Identity Training Kit 附带的 Silverlight IdentityModel。这工作正常。
问题是当我进行服务调用(用于获取一些数据)时,在服务中我可以看到 IClaimsIdentity 类型的标识,但它的声明集合是空的。使用 ClaimsIdentitySessionManager InvokeAsync 方法调用该服务,以便将 IssuedToken 信息添加到 SOAP 标头。服务调用在会话管理器的上下文中执行。
我尝试了不同类型的代码和设置,但我无法获得对服务的声明。我已经读过它应该通过使用 CustomBinding 来工作,但是在使用它时我得到一个错误:Content Type text/xml; charset=utf-8 不受 service 支持。客户端和服务绑定可能不匹配。
我什至尝试在不同的消息版本中使用“TextMessageEncoding”而不是“BinaryMessageEncoding”,但没有帮助。
这个错误是什么意思,我该如何解决?
用于调用 WCF 服务的代码:
private void GetWeekPlanning()
{
var service = _ServiceManager.GetServiceDescriptionAndCheckNull(typeof(ILeisureServiceAsync), ServiceTransportType.BasicHttpBinding);
var binding = new CustomBinding()
{
Elements = { new BinaryMessageEncodingBindingElement(), new HttpsTransportBindingElement() }
};
var proxy = new LeisureServiceAsyncProxy(binding, service.ServiceEndpointAddress);
ClaimsIdentitySessionManager.Current.InvokeAsync(
() =>
{
proxy.BeginGetActivityPlanListByDate(
DateTime.MinValue,
DateTime.MaxValue,
result =>
{
var plans = proxy.EndGetActivityPlanListByDate(result);
SynchronizationContext.Post(
callback =>
{
// Do something with plans
},
null);
},
null);
},
proxy.InnerChannel,
WSTrust13Constants.KeyTypes.Bearer);
}
来自服务器 App.config 的代码片段:http: //pastebin.com/7RmPQVUR
客户端 web.config: http: //pastebin.com/Bz9W6mUj
亲切的问候,
汉斯