我有一个定义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(){...}
}
到目前为止,我尝试创建了两个额外的接口:IInterfaceSOAP
和IInterfaceREST
,都继承自IInterface
。已从Method2()
移除了IInterface
声明并将其添加到IInterfaceSOAP
,并创建了两个单独的类MyServiceSOAP : IInterfaceSOAP
和MyServiceREST : IInterfaceREST
。然后为每个派生类定义两个单独的端点。
但是,当我使用WcfTestClient
测试服务时,soap服务仅列出Method1()
(在基础IInterface
中定义的那个)。
上述模式是否可以通过两个独立的端点选择性地暴露方法?还是有其他方法我错过了?
提前致谢。
P.S。请注意上面的界面是我正在尝试做的非常简化的版本。生产版本中有很多方法。
答案 0 :(得分:0)
这种方法看起来有点臭,因为您的服务合同和实施中存在部署问题。鉴于REST无论如何都不公开元数据,我认为在不同的接口中没有很多好处。
我原本认为一个行为或ServiceAuthorizationManager,它检查消息版本和不允许访问REST请求将是一个更清洁的解决方案。这样,您可以为单个合同提供单个服务实现,并将协议问题推回到它们所属的位置:部署和配置。
答案 1 :(得分:0)
没关系......由于我错过了方法2的大量方法。由于它是在派生接口中定义的,因此基本接口中的所有方法都在此之前,我错过了它。