Веб-метод WCF, который принимает разные типы сообщений - PullRequest
1 голос
/ 02 июля 2010

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

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

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

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

1 Ответ

2 голосов
/ 03 июля 2010

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

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

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

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

...