В моей службе WCF мне нужна только 1 конечная точка (1 URI), однако я хочу, чтобы этот URI мог обрабатывать несколько типов запросов. 5 различных типов запросов могут быть отправлены на эту услугу от другой компании. Каждый запрос имеет уникальные XML-схемы.
Я создал классы для каждого XML-запроса, который нужно сериализовать. Обычно я просто перегружаю функцию, когда параметр отличается ... однако я не могу сделать это в этом случае, потому что UriTemplate моих функций WCF одинаковы и выдает ошибки, когда я пытаюсь запустить приложение (говоря, что UriTemplate должен быть уникальным).
В каждом XML-запросе есть узел с именем «requestType». Я пытаюсь понять, что будут делать другие ... я должен сериализовать самостоятельно и игнорировать встроенную сериализацию из DataContract? Какой тип параметра я должен установить для своей функции, чтобы она принимала ... XMLDocument, затем основанный на ответвлении requestType в логику запроса?
Возвращенный XML из этой функции также уникален в зависимости от типа запроса .... однако я не могу вернуть XMLDocument из OperationContract ... выдается больше ошибок (я думаю, потому что он сказал, что его нельзя сериализовать).
Я попытался создать класс, который можно сериализовать из всех типов запросов, установив
IsRequired = false, EmitDefaultValue = false
... в DataMembers для объектов, которые не являются общими для разных типов запросов. Сейчас я сталкиваюсь с проблемой, когда Order должен быть правильно установлен для каждого DataMember, иначе он не будет сериализован в мой объект класса .... Я бы подумал, что Order не нужно устанавливать: /
Edit:
Это то, что я сейчас использую ... XML размещен в моем сервисе.
[WebHelp(Comment = "comment")]
[WebInvoke(UriTemplate = "foobar",
Method = "POST",
BodyStyle = WebMessageBodyStyle.Bare,
ResponseFormat = WebMessageFormat.Xml)]
[OperationContract]
public ResponseType foobar(ReqeustType request)
...
При тестировании я бы отправил XML на http://localhost:4011/XMLWCF/Service.svc/foobar