Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF服务可以由各种接口组成吗?_C#_Wcf - Fatal编程技术网

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

C# WCF服务可以由各种接口组成吗?,c#,wcf,C#,Wcf,我必须创建一个包含五个不同组件的WCF服务。每个组件都有一个接口,每个组件都有它的具体实现。这五个接口结合在一起构成了我的应用程序 我不知道我是否应该创建5个独立的wcf服务,客户端可以调用它们。虽然它们是独立的,并且只有一个责任,但我尽量避免创建5个服务,因为这对于托管、部署和维护来说是一个过度的任务。而且它们很轻。 所以我想征求你的意见和建议,好吗 我应该创建一个实现所有其他五个接口的大型接口和一个具有所有接口功能的具体实现吗 public interface IMainInterface:

我必须创建一个包含五个不同组件的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
    
    }
    
  • 是否会因为组件1..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();
       }    
    }
    
  • 您推荐哪种方法,或者我可以采取其他方法?

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


    是的,WCF服务由其代表单个接口的服务契约定义。此接口应使用
    [ServiceContract]
    属性装饰,每个方法都应使用
    [ServiceContract]
    属性装饰。

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

  • 您的类必须实现您想要实现的所有契约
  • 要公开的所有合同都必须用[ServiceContract]属性标记
  • 对于每个单独的接口,您需要在配置文件或代码中以声明方式定义单独的端点

  • 我建议创建5个具有ServiceContract和ServiceOperation属性的接口,并拥有一个从5个接口继承并包含其实现定义的类


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

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


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

    它不会扰乱具体的实现,因为我将不得不添加所有这些接口的具体实现吗组件转换为主组件。@KnowledgeSeek,是的,它会,但WCF就是这样工作的。如果您定义了另一个接口(服务契约),那就是另一个WCF服务。因为我可以在IMainInterface中创建公共方法,但具体实现将非常空。我们将有单独的类来保存组件1…5接口的具体实现“一个WCF服务是由它的服务契约定义的,它代表一个接口”是误导性的。WCF服务由单个类实现,该类可以支持无限数量的接口。每个接口都作为端点公开。端点由单个接口定义。我将在windows服务中托管。因为服务主机需要类和接口名,所以这将如何工作请不要在帖子中使用签名或标记行。在这种情况下,如果您只是想使定义了接口的文件更轻松,那么只需使用部分定义:通过将多个文件标记为部分文件来分隔接口代码,但记住保持名称空间不变。在这种情况下,您将有一个接口,并且易于处理代码。是的,但接口将是巨大的。我应该有五台服务主机吗?有两种方法可以解决这个问题:当我建议你使用第一台时,你抱怨有五个端点;当我建议使用第二台时,你抱怨界面太大。您是在寻找问题的答案,还是只是在寻找投诉的机会?服务主机将调用哪个接口作为其服务合同?