我必须创建一个包含五个不同组件的WCF服务。每个组件都有一个接口,每个组件都有其具体实现。所有这五个接口组合在一起构成了我的应用程序。
我不知道我是否应该创建客户端可以调用的5个单独的wcf服务。虽然他们是独立的并且有一个单一的责任,但我试图避免创建5个服务,因为它对于托管,部署和维护来说是一种过度杀伤力。另外它们重量很轻。 所以我想问你的意见和建议吗?
我应该创建一个实现所有其他五个接口的大型接口,以及一个具有所有接口功能的具体实现,例如。
public interface IMainInterface: IComponent1, IComponent2, IComponent3, IComponent4, IComponent5
{
region implementation of IComponent1
public void CallMethod(){...}
endregion
region implementation of IComponent2
endregion
//and so on
}
它会不会混淆具体的实现,因为component1..5的实现将在IMainInterface的实现中?
我应该将五个接口作为主接口的属性,并在我的实现中创建调用五个实现的方法的公共方法,例如。
public interface IMainInterface
{
public IComponent1 Component1 {get;set;}
public IComponent2 Component1 {get;set;}
public IComponent3 Component1 {get;set;}
public IComponent4 Component1 {get;set;}
public IComponent5 Component1 {get;set;}
}
它的概念实现将类似于:
public class Main:IMainInterface
{
public void CallComponent1Method()
{
Component1.CallMethod();
}
}
您会推荐哪种方法,还是采用其他方法?
答案 0 :(得分:1)
我应该只创建一个实现所有的大型接口 其他五个接口和具有功能的具体实现 对于所有接口,例如
是的,WCF服务由它的服务合同定义,该服务合同代表单个接口。此界面应使用[ServiceContract]
属性和每个具有[ServiceOperation]
属性的单独方法进行修饰。
答案 1 :(得分:1)
实际上,您可以拥有任意数量的接口。唯一的问题是,对于每个接口,您需要定义一个单独的端点。
答案 2 :(得分:0)
我建议使用ServiceContract和ServiceOperation属性创建5个接口,并使用一个继承自5个接口的类,并包含其实现的定义。
我没有看到创建实现其他5的第6个接口的理由,除非它有自己的某些方法或具有一些架构目的
答案 3 :(得分:0)
WCF服务由单个类实现。但是,该类可以支持无限数量的接口。每个接口都可以作为自己的端点公开。请参阅Multiple Contracts。
因此,您绝对可以使用单个服务来实现所有5个接口。请注意哪个服务实现了从客户端角度抽象出哪个端点。如果您的客户端需要与三个接口进行通信,则需要创建一个到三个不同端点的新代理/连接,并且不应对共享的底层服务实现做出任何假设。