Веб-метод WCF, который принимает разные типы сообщений

С WCF от Microsoft легко работать, когда вы создаете веб-сервисы, где каждое сообщение имеет свой собственный веб-метод. WCF генерирует все WSDL, и все легко.

Я хочу иметь один веб-метод, который принимает несколько разных сообщений (я не хочу добавлять метод mew каждый раз, когда добавляю новый тип сообщения). Сами сообщения будут иметь информацию заголовка, которая идентифицирует тип сообщения. Как только я узнаю тип сообщения, я узнаю структуру остальной части сообщения.

Единственный способ, как я нашел, сделать это с WCF - это заставить метод принимать строку, которую я анализирую как XML и использую. Однако я не вижу четкого способа опубликовать различные типы сообщений в WSDL; Итак, весь сервис по сути недокументирован.

Кто-нибудь знает методику использования в WCF?

1 ответ

Решение

Вы можете написать контракт операции, который принимает любое сообщение, установив для Action значение * и сделав так, чтобы оно получало объект Message:

[ServiceContract]
public interface IMessageContract
{
    [OperationContract(Action = "*", ReplyAction = "*")]
    Message ProcessRequest(Message request);
}

Объект Message предоставляет вам доступ к заголовкам и имеет методы для десериализации тела.

Чтобы экспортировать свой собственный WSDL, вам нужно будет реализовать IWsdlExportExtension для поведения контракта или поведения операции и присоединить его к вашей службе. Это даст вам доступ к WsdlExporter, и вы сможете создать ContractDescription самостоятельно и вызвать ExportContract, чтобы он появился в сгенерированном WSDL.

Другие вопросы по тегам