Как я могу управлять именем общего соглашения WCF Message
Я создаю службу WCF, используя модель контракта сообщения.
Я создал общий контракт с сообщением запроса следующим образом:
[MessageContract]
public Request<T>
{
[MessageBodyMember]
public T Details { get; set; }
}
Я использую [DataContract(Name="Contract{0}")]
для создания читаемых имен для общих контрактов данных, но этот подход, похоже, не работает для меня, используя контракты с сообщениями.
Есть ли способ достичь такого же поведения с использованием модели контракта сообщений?
Ответы
Ответ 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
, чтобы указать, что сообщение должно быть сериализовано в элемент оболочки.