Поскольку больше ничего не помогает, я «обманул» его так:
Добавьте MessageHeader на стороне клиента:
using (OperationContextScope scope = new OperationContextScope(cli.InnerChannel))
{
OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader("MyHeader", Guid.NewGuid().ToString(), ""));
string ret = cli.GetData(1);
}
В свойстве «Имя» заголовка IУ меня есть имя заголовка, который я хочу передать, и я использую Пространство имен в качестве держателя значения (поскольку я не могу получить это значение заголовка - оно не отображается как свойство ?!).Я делаю это на стороне клиента каждый раз, когда создаю экземпляр службы.
На службе я читаю заголовок как:
var head = OperationContext.Current.IncomingMessageHeaders.FirstOrDefault(h => h.Name == "MyHeader");
string channelId = head.Namespace;
Это определенно хак, но у меня нет временисоздать что-то более элегантное, и это позволяет мне поддерживать «идентификатор канала» так, как я могу его контролировать ... это уродливое решение, и мне это не нравится, поэтому всякий раз, когда кто-то находит что-то лучшее, я ценю это ...
edit : я пытался использовать Outgoing / IncomingMessageProperties, но, похоже, это не работает - его нигде нет на стороне сервера ... Я, наверное, что-то упустил ...