[英]Design Pattern for selectively exposing methods through SOAP and REST endpoints in WCF
我有一个定义IInterface接口的WCF Web服务。 该接口声明了两个方法:Method1和Method2。我想通过SOAP端点公开这两个方法,但只希望通过REST端点公开Method2。
声明示例:
[ServiceContract]
public Interface IInterface
{
[OperationContract]
void Method1();
[OperationContract]
void Method2();
}
public class MyService : IInterface
{
public void Method1(){...}
public void Method2(){...}
}
到目前为止,我已经尝试创建两个附加接口: IInterfaceSOAP
和IInterfaceREST
,它们都继承自IInterface
。 从IInterface
删除了IInterface
Method2()
声明,并将其添加到IInterfaceSOAP
并创建了两个单独的类MyServiceSOAP : IInterfaceSOAP
和MyServiceREST : IInterfaceREST
。 然后为每个派生类定义两个单独的端点。
但是,当我使用WcfTestClient
测试服务时,soap服务仅列出Method1()
(在基础IInterface
定义的IInterface
)。
上面的模式是否是通过两个单独的端点有选择地公开方法的公认解决方案? 还是我错过了其他方法?
提前致谢。
PS请注意,上面的界面是我正在尝试做的极其简化的版本。 生产版本中有很多方法。
这种方法似乎有点臭,因为您有部署方面的顾虑泄漏到服务合同和实施中。 鉴于REST无论如何都不会公开元数据,所以我在不同的接口中看不到很多好处。
我本来以为是一种行为或ServiceAuthorizationManager,它检查了消息版本并禁止访问REST请求,这将是一个更干净的解决方案。 这样,您可以为单个合同提供单个服务实现,并将协议问题推回到它们所属的位置:部署和配置。
没关系...由于大量方法,我错过了Method2。 由于它是在派生的接口中定义的,因此基本接口中的所有方法都早于此接口,我错过了它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.