WCF服务可以组成各种接口吗?

时间:2011-11-02 16:22:22

标签: c# wcf

我必须创建一个包含五个不同组件的WCF服务。每个组件都有一个接口,每个组件都有其具体实现。所有这五个接口组合在一起构成了我的应用程序。

我不知道我是否应该创建客户端可以调用的5个单独的wcf服务。虽然他们是独立的并且有一个单一的责任,但我试图避免创建5个服务,因为它对于托管,部署和维护来说是一种过度杀伤力。另外它们重量很轻。 所以我想问你的意见和建议吗?

  1. 我应该创建一个实现所有其他五个接口的大型接口,以及一个具有所有接口功能的具体实现,例如。

    public interface IMainInterface: IComponent1, IComponent2, IComponent3, IComponent4, IComponent5
     {
         region implementation of IComponent1
             public void CallMethod(){...}
         endregion
    
        region implementation of IComponent2
        endregion
    
       //and so on
    
    }
    
  2. 它会不会混淆具体的实现,因为component1..5的实现将在IMainInterface的实现中?

    1. 我应该将五个接口作为主接口的属性,并在我的实现中创建调用五个实现的方法的公共方法,例如。

      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();
         }    
      }
      
    2. 您会推荐哪种方法,还是采用其他方法?

4 个答案:

答案 0 :(得分:1)

  

我应该只创建一个实现所有的大型接口   其他五个接口和具有功能的具体实现   对于所有接口,例如

是的,WCF服务由它的服务合同定义,该服务合同代表单个接口。此界面应使用[ServiceContract]属性和每个具有[ServiceOperation]属性的单独方法进行修饰。

答案 1 :(得分:1)

实际上,您可以拥有任意数量的接口。唯一的问题是,对于每个接口,您需要定义一个单独的端点。

  1. 您的班级必须执行您想要的所有合同。
  2. 您要公开的所有合约都必须以[ServiceContract]属性标记。
  3. 对于每个单独的接口,您需要在配置文件中或从代码中以声明方式定义单独的endpoing。

答案 2 :(得分:0)

我建议使用ServiceContract和ServiceOperation属性创建5个接口,并使用一个继承自5个接口的类,并包含其实现的定义。

我没有看到创建实现其他5的第6个接口的理由,除非它有自己的某些方法或具有一些架构目的

答案 3 :(得分:0)

WCF服务由单个类实现。但是,该类可以支持无限数量的接口。每个接口都可以作为自己的端点公开。请参阅Multiple Contracts

因此,您绝对可以使用单个服务来实现所有5个接口。请注意哪个服务实现了从客户端角度抽象出哪个端点。如果您的客户端需要与三个接口进行通信,则需要创建一个到三个不同端点的新代理/连接,并且不应对共享的底层服务实现做出任何假设。