У меня есть клиентское приложение Silverlight, которое входит в систему STS и получает взамен набор претензий. Я использую Silverlight IdentityModel, который входит в комплект Identity Training Kit. Это отлично работает.
Проблема заключается в том, что когда я выполняю вызов службы (для получения некоторых данных), внутри службы я вижу идентификатор типа IClaimsIdentity, но его коллекция утверждений пуста. Служба вызывается с помощью метода InvokeAsync ClaimsIdentitySessionManager, поэтому информация 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
С уважением,
Hans