Как я могу контролировать имя общего Контракта Сообщения WCF - PullRequest
18 голосов
/ 18 октября 2010

Я создаю службу WCF с использованием модели контракта сообщения.

Я создал общий контракт сообщения запроса, например:

[MessageContract]
public Request<T>
{
    [MessageBodyMember]
    public T Details { get; set; }
}

Я привык использовать [DataContract(Name="Contract{0}")] для создания удобочитаемых имен для договоров на общие данные, но этот подход, похоже, не работает для меня, используя договоры на сообщения.

Есть ли способ добиться того же поведения с помощью модели контракта сообщений?

Ответы [ 2 ]

4 голосов
/ 02 ноября 2012

Кажется, что вам нужно много работы, но я верю, что вы можете создать MessageInspector, который позволит вам напрямую взаимодействовать с XML.

Инспекторы клиентских сообщений реализуют интерфейс IClientMessageInspector, а инспекторы сервисных сообщений реализуют интерфейс IDispatchMessageInspector.

http://msdn.microsoft.com/en-us/library/aa717047.aspx

Любой инспектор сообщений службы (диспетчера) должен реализовывать два IDispatchMessageInspector метода AfterReceiveRequest и BeforeSendReply.

Ссылка содержит гораздо более подробные сведения, но после того, как они будут реализованы, вы сможете добавить инспектор в ваш файл web.config и все будет готово.

2 голосов
/ 19 октября 2010

В атрибуте MessageContract есть свойство WrapperName и WrapperNamespace, которое, я думаю, делает то же самое.Например,

[MessageContract(WrapperName = "FooMessage", IsWrapped = true)]
public class Request<T>
{ ... }

Обратите внимание на добавление свойства IsWrapped, чтобы указать, что сообщение должно быть сериализовано в элемент оболочки.

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