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

本文关键字:接口 服务 WCF | 更新日期: 2023-09-27 18:13:32

我必须创建一个具有五个不同组件的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
    }
    

将不会因为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();
       }    
    }
    

你会推荐哪一种方法,或者我可以采取另一种方法?

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

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

是的,WCF服务是由代表单个接口的服务契约定义的。这个接口应该用[ServiceContract]属性来装饰,每个单独的方法应该用[ServiceOperation]属性来装饰。

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

  1. 你的类必须实现所有你想要的契约。
  2. 所有你想要公开的合约,都应该用[ServiceContract] Attribute标记。
  3. 对于每个单独的接口,你需要在配置文件中声明或从代码中定义一个单独的结束。

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

我不认为有理由创建第6个接口来实现其他5个接口,除非它有一些自己的方法或有一些架构目的

WCF服务由单个类实现。然而,该类可以支持无限数量的接口。每个接口都可以作为自己的端点公开。

所以你完全可以使用一个服务来实现所有5个接口。请注意,从客户端角度来看,哪个服务实现了哪个端点。如果您的客户端需要与三个接口通信,那么它将需要创建一个新的代理/连接到三个不同的端点,并且它不应该对共享的底层服务实现做出任何假设。