Веб-метод 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.