使用WCF, REST和SOAP当然应该和谐地工作

本文关键字:和谐 工作 WCF REST SOAP 使用 | 更新日期: 2023-09-27 18:10:13

REST只接受字符串..?

所以我所做的是做一个字符串暴露契约并将其转换为服务器端,并将其传递给SOAP直接调用的方法。这工作。(我可以从firefox调用REST)

但是现在,我不能在不引起错误问题的情况下公开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个暴露的方法。只有当我隐藏第三将REST工作。删除我的SOAP连接。(我相信它想要在第三个方法上设置REST,因为它没有被定义,无法理解它)

    // 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。

使用WCF, REST和SOAP当然应该和谐地工作

我可以使用UriTemplate传递非字符串到WCF RESTful服务吗?:

路径中的

UriTemplate变量在使用时总是解析为字符串WebGet或WebInvoke。你只能将UriTemplate变量绑定到int,当它们位于UriTemplate的查询部分时,

这是从答案(我可以使用UriTemplate传递非字符串到WCF RESTful服务吗?),粗体格式是我的…

一个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

REST只接受字符串

不,那不是真的。映射到URL模板的参数可以是任意基本类型。WCF将为您进行转换。如果你使用WebInvoke而不是WebGet,你将使用PUT或POST方法,你甚至可以在请求中传递整个可序列化对象。