Подтвердить что ты не робот

Как я могу управлять именем общего соглашения WCF Message

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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