仅向REST消费者开放的操作

时间:2016-04-12 05:16:39

标签: c# wcf rest soap

有没有办法将Operation限制为仅供REST使用者使用,而不能限制为SOAP使用者?

例如:

[OperationContract]
List<Response> GetResponses(int orderID);

[OperationContract]
[WebGet(UriTemplate = "{orderID}/responses",
    ResponseFormat = WebMessageFormat.Json)]
List<Response> GetResponses(string orderID);

虽然REST使用者只能处理第二种方法,但SOAP使用者会看到这两种方法,但无论如何都应该使用第一种方法。所以我想只向SOAP消费者展示第一种方法,而仅向REST消费者展示第二种方法。我可以在不创建新服务的情况下实现目标吗?

1 个答案:

答案 0 :(得分:1)

您可以做的是分离合同,一个用于暴露SOAP,另一个用于暴露REST,然后使您的服务实现两者:

SOAP合约

[ServiceContract]
public interface IDummySoap
{
    [OperationContract]
    List<Response> GetResponses(int orderID);
}

REST合同

[ServiceContract]
public interface IDummyRest 
{    
    [OperationContract]
    [WebGet(UriTemplate = "{orderID}/responses",
        ResponseFormat = WebMessageFormat.Json)]
    List<Response> GetResponses(string orderID);
}

服务实施

public class DummyService : IDummySoap, IDummyRest
{
    public List<Response> GetResponses(int orderID)
    {
        // Implementation
    }

    public List<Response> GetResponses(string orderID)
    {
        // Implementation
    }    
}

那些想要通过SOAP调用您的服务的人将使用SOAP合同,而其他人则使用REST合同。