【问题标题】:Operation that is opened to REST consumers only仅对 REST 消费者开放的操作
【发布时间】:2016-04-12 05:16:38
【问题描述】:

有没有办法将操作限制为仅对 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 消费者展示第二种方法。我可以在不创建新服务的情况下实现我的目标吗?

【问题讨论】:

  • 也许你不能这样做
  • 是的,我是这么认为的。这就是我在这里的原因;p

标签: c# wcf rest soap


【解决方案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 合约。

【讨论】:

  • 哦,太好了。我只是忘记了接口。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
  • 2019-09-07
  • 2016-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多