Мне нужно использовать технику опроса, чтобы уведомлять клиентов об изменениях на стороне сервера. Поэтому я попытался использовать DuplexHttpBinding (http://code.msdn.microsoft.com/duplexhttp). Я отлично работаю с незащищенными сообщениями, но мне нужно использовать безопасность на уровне сообщений в моем проекте (UsernameForCertificate). Хорошо, я решил добавить SymmetricSecurityBindingElement в коллекцию привязок:
var securityElement = SecurityBindingElement.CreateUserNameForCertificateBindingElement();
collection.Add(securityElement);
И тогда возникла проблема. Если мы используем безопасность на уровне сообщений, все сообщения включают заголовки безопасности с подписью сообщения, например:
<o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:s="http://www.w3.org/2003/05/soap-envelope">
....
</o:Security>
А пользовательские сообщения опроса, которые отправляются по каналу пользовательских запросов, не имеют заголовков безопасности, поэтому при отправке этого сообщения через канал с уровнем безопасности сообщений возникает исключение:
System.ServiceModel.Security.MessageSecurityException, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
No signature message parts were specified for messages with the 'http://samples.microsoft.com/duplexhttp/pollingAction' action.
Пожалуйста, советуйте обходной путь, как добавить правильные заголовки безопасности в мои пользовательские сообщения опроса перед отправкой их в канал пользовательских запросов. Вы можете скачать исходный код по ссылке, размещенной ранее, и просто попытаться использовать его с безопасностью UsernameForCertificate, чтобы воспроизвести проблему.
Спасибо.