Используя WCF, конечно, REST и SOAP должны работать в гармонии? - PullRequest
2 голосов
/ 29 сентября 2011

REST принимает только строку ..?

Итак, я делаю контракт с открытой строкой, преобразую его на стороне сервера и передаю его моему методу, который напрямую вызывал SOAP. Который работает. (Я могу позвонить в REST из firefox)

НО теперь я не могу раскрыть свой SOAP OperationContract без, вызывая проблему с ошибкой:

Operation 'GetServices' of contract 'IServices' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.

Ниже приведены мои 3 открытых метода. Только когда я скрываю, 3-й будет работать REST. Удаление моего SOAP-соединения .. (Я верю, что он хочет установить REST для 3-го метода и, поскольку он не был определен, не понимает его)

    // REST
    [OperationContract]
    [WebGet(UriTemplate = "GET/Services/{CostCentreNo}/{Filter}")]
    List<Services> RestGetServices(String CostCentreNo, String Filter);

    // REST
    [OperationContract]
    [WebGet(UriTemplate = "GET/ServiceDetails/{CostCentreNo}/{ServiceCode}/{Recurring}")]
    List<ServiceDetails> RestGetServiceDetails(String CostCentreNo, String ServiceCode, String Recurring);

    // SOAP
    [OperationContract]
    List<Services> GetServices(Int32 CostCentreNo, Int32 Filter);

Конечно, я могу сделать только один метод контракта, который позволяет мне вызывать SOAP или REST.

Ответы [ 2 ]

3 голосов
/ 29 сентября 2011

Как упомянуто в Можно ли передать нестроковый сервис WCF RESTful с помощью UriTemplate? :

Переменные UriTemplate в пути всегда разрешаются в строкипри использовании WebGet или WebInvoke.Переменные UriTemplate можно привязать только к int, long и т. Д., Если они находятся в части query UriTemplate.

Это взято из ответа ( CanЯ передаю нестроковый сервис WCF RESTful, используя UriTemplate? ), мое форматирование жирным шрифтом - мое ...

Итак, пример метода доступа к REST и SOAP:

// REST AND SOAP
[OperationContract]
[WebGet(UriTemplate = "/Services?CostCentreNo={CostCentreNo}&Filter={Filter}")]
List<Services> GetServices(Int32 CostCentreNo, Int32 Filter);

Который доступен по

http://localhost:1337/WCF.IService.svc/rest/Services?CostCentreNo=1&Filter=1

2 голосов
/ 29 сентября 2011

REST принимает только строку

Нет, это не правда. Параметры, сопоставленные с шаблоном URL, могут быть любого базового типа. WCF сделает преобразование для вас. Если вы используете WebInvoke вместо WebGet и будете использовать метод PUT или POST, вы даже можете передавать целые сериализуемые объекты внутри запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...