我有一个实现两个合同的Web服务:
[ServiceContract]
public interface IServiceA
{
[OperationContrcat]
void OpertationA();
}
[ServiceContract]
public interface IServiceB
{
[OperationContrcat]
void OpertationB();
}
public class Service : IServiceA, IServiceB
{
…
}
在我的web.config中,我为每个合同定义了具有单独端点的服务,这完全有效,但我希望能够单独为每个合同导出WSDL。
目前我只获得整个服务的单个WSDL,当使用它时,生成一个客户端,可以看到来自IServiceA
和IServiceB
的两种方法。
我想知道是否有办法以某种方式提供单独的wsdl,如果我需要ServiceAClinet
,我可以使用仅定义IServiceA
方法的wsdl和IServiceB
相同的方法。
经过一番搜索,我发现这个Single endpoint with multiple service contracts实际上是一个好主意,并不需要太多的额外工作,但我想知道是否有可能没有包装?
先感谢您。
虽然在OOP中从多个接口派生是有用的,但对于WCF,它会带来可疑的好处。通过滚动到一个,你强制所有人共享相同的实例上下文;并发性;可能还有安全模型。
我会敦促你把服务分开。
即
如果你遵循这个建议,那么如何获得单独的WSDL的问题就会消失。
我最终使用Singleton模式并实现以便于实现一个服务的实现,并且在某种程度上将客户关注点分离。
编辑:
public class ServiceA : IServiceA {
public void OperationA() {
Service.Instance.Operation()
}
}
和ServiceB
一样。一旦我这样做,我改变了我的.svc文件,仅为Contract实现而不是主服务生成WSDL。
编辑2:
虽然我确实找到了解决问题的方法,但这不是最佳做法。一个更好的方法是@MickyD从一开始就用SOA和SOLID原则解决的设计服务,这将使您的服务更易于维护和销售。