设计模式,用于通过WCF中的SOAP和REST端点有选择地公开方法

时间:2011-07-25 22:54:25

标签: .net wcf web-services rest soap

我有一个定义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。已从Method2()移除了IInterface声明并将其添加到IInterfaceSOAP,并创建了两个单独的类MyServiceSOAP : IInterfaceSOAPMyServiceREST : IInterfaceREST。然后为每个派生类定义两个单独的端点。

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

上述模式是否可以通过两个独立的端点选择性地暴露方法?还是有其他方法我错过了?

提前致谢。

P.S。请注意上面的界面是我正在尝试做的非常简化的版本。生产版本中有很多方法。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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