我有一个Silverlight客户端应用程序,它登录到STS并获得一系列索赔作为回报。我使用Identity Training Kit附带的Silverlight IdentityModel。这很好用。
问题是当我进行服务调用(获取一些数据)时,在服务中我可以看到IClaimsIdentity类型的标识,但其声明集合为空。使用ClaimsIdentitySessionManager InvokeAsync方法调用该服务,以便将IssuedToken信息添加到SOAP标头中。服务调用在会话管理器的上下文中执行。
我尝试了不同类型的代码和设置,但我无法获得对服务的声明。我已经读过它应该可以使用CustomBinding,但在使用它时我收到一个错误: Content Type text / xml;服务不支持charset = utf-8。客户端和服务绑定可能不匹配。
我甚至尝试使用'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
亲切的问候,
汉斯