【问题标题】:Design Pattern for selectively exposing methods through SOAP and REST endpoints in WCF通过 WCF 中的 SOAP 和 REST 端点有选择地公开方法的设计模式
【发布时间】:2011-07-25 22:54:25
【问题描述】:

我有一个定义 IInterface 接口的 WCF Web 服务。该接口声明了两个方法:Method1 和 Method 2。我想通过 SOAP 端点公开这两个方法,但只希望通过 REST 端点公开 Method2。

示例声明:

[ServiceContract]
public Interface IInterface
{
    [OperationContract]
    void Method1();
    [OperationContract]
    void Method2();
}

public class MyService : IInterface
{
    public void Method1(){...}
    public void Method2(){...}
}

到目前为止,我已经尝试创建两个额外的接口:IInterfaceSOAPIInterfaceREST,它们都继承自 IInterface。从IInterface 中删除Method2() 声明并将其添加到IInterfaceSOAP 并创建两个单独的类MyServiceSOAP : IInterfaceSOAPMyServiceREST : IInterfaceREST。然后为每个派生类定义两个单独的端点。

但是当我使用WcfTestClient 测试服务时,soap 服务只列出Method1()(在基础IInterface 中定义的那个)。

上述模式是通过两个单独的端点选择性地公开方法的公认解决方案吗?还是我错过了其他一些方法?

提前致谢。

附:请注意,上面的界面是我正在尝试做的极其简化的版本。生产版本中还有很多方法。

【问题讨论】:

    标签: .net wcf web-services rest soap


    【解决方案1】:

    这种方法似乎有点臭,因为您的服务合同和实施中存在部署问题。鉴于 REST 无论如何都不会公开元数据,我看不到不同接口有很多好处。

    我原以为检查消息版本并禁止 REST 请求访问的行为或 ServiceAuthorizationManager 将是一个更干净的解决方案。这样一来,您就可以为单个合同提供单个服务实现,并将协议问题推回它们所属的位置:部署和配置。

    【讨论】:

    • 我确实在 web.config 中定义了端点和行为。我想要实现的只是 SOAP 和 REST 端点的代码重用,但有选择地禁止 REST 中的某些方法。
    • @Dimitri 我无法完全理解如何使用差异化接口实现代码重用,因为您说有两种实现 - 每个差异化接口一个。我建议您对 REST 接口施加的限制可能只是一个部署问题,因此应该反映在那里,而不是在合同/实施中。
    • 我有 Base 接口,其中包含我想在 REST 和 SOAP 中使用的大部分方法。然后我为上述每种服务类型派生两个接口。 SOAP 一有我想公开的其他方法,但 REST 一没有。现在,当我从这两个接口派生类时,实现仅存在于从 SOAP 接口派生的类中(实现了所有方法),但从 REST 接口派生的类仅从 SOAP 类调用所需的方法。跨度>
    【解决方案2】:

    没关系...由于方法太多,我错过了 Method2。由于它是在派生接口中定义的,因此基本接口中的所有方法都在此之前,我错过了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      • 2013-03-08
      相关资源
      最近更新 更多