Как передать объекты через заголовок в WCF - PullRequest
1 голос
/ 31 марта 2010

Я пытаюсь передать некоторую информацию о пользователях в заголовке сообщения через инспекторов сообщений.

Я создал поведение, которое добавляет инспектора в службу (как клиент, так и сервер).

Но когда я пытаюсь связаться с сервисом, я получаю следующую ошибку:

XmlException:
Имя не может начинаться с символа «<», шестнадцатеричное значение 0x3C. </em>

У меня также есть исключение, сообщающее, что DataContracts неожиданно.

Тип 'System.DelegateSerializationHolder + DelegateEntry' с названием контракта данных «DelegateSerializationHolder.DelegateEntry: http://schemas.datacontract.org/2004/07/System' не ожидается Рассмотрите возможность использования DataContractResolver или добавить любые типы статически не известен в списке известные типы - например, с помощью атрибут KnownTypeAttribute или добавив их в список известных типов передано в DataContractSerializer.

Дело в том, что мой объект содержит другие объекты, помеченные как DataContract, и мне не интересно добавлять атрибут KnownType для этих типов.

Другая проблема может заключаться в том, что мой объект для сериализации очень ограничен в форме внутреннего класса, внутренних свойств и т. Д.

Может кто-нибудь направить меня в правильном направлении. Что я делаю не так?

Код:

public virtual object BeforeSendRequest(ref Message request, IClientChannel channel)
{
    var header = MessageHeader.CreateHeader("<name>", "<namespace>", object);
    request.Headers.Add(header);

    return Guid.NewGuid();
}

Ответы [ 2 ]

1 голос
/ 31 марта 2010

Не помещайте угловые скобки в реальные строки. Помните, что формат сериализации может даже не основываться на тексте, все, что вы делаете, это указываете имя элемента и пространство имен. Поэтому ваш код должен выглядеть примерно так:

 var header = MessageHeader.CreateHeader("name", "urn:myNamespace", object); 
 request.Headers.Add(header); 
0 голосов
/ 18 мая 2010

Чтобы закрыть этот вопрос, я так и не решил исключение. Вместо этого я реализовал ISerializable, который отлично работал для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...