WCF -在多个契约共享通用方法时寻找最佳实践

本文关键字:方法 寻找 最佳 共享 契约 WCF | 更新日期: 2023-09-27 17:49:36

我打算让一个核心模块公开接口,以便其他大模块(不同的客户端)可以与之通信。如果有一组方法:

void Method_A();
void Method_B();
void Method_X1();

向一种类型的客户端(模块"X1")和:

void Method_A();
void Method_B();
void Method_X2();

暴露给其他类型的客户端(模块"X2"),并且知道Method_AMethod_B应该具有确切的实现…那么我如何才能最好地设计服务体系结构(在服务和契约方面)?

是否有机会实现Method_A和Method_B只一次(而不是2次在不同的合同实现)?

在使用WCF时如何从接口继承中获益?

提前感谢大家,如果我需要做得更清楚,请让我知道!

@marc_s……我真的很感激你的观点……

WCF -在多个契约共享通用方法时寻找最佳实践

类可以继承满足接口的方法,所以你可以有一个IServiceBase接口和ServiceBase类,只实现Method_AMethod_B,然后把唯一的方法挑出来单独的接口,最后在继承ServiceBase并实现Interface1或Interface2的类中将它们组合在一起。如:

[ServiceContract]
public interface IServiceBase
{
    [OperationContract]
    void Method_A();
    [OperationContract]
    void Method_B();
}
[ServiceContract]
public interface IService1 : IServiceBase
{
    [OperationContract]
    void Method_X1();
}
[ServiceContract]
public interface IService2 : IServiceBase
{
    [OperationContract]
    void Method_X2();
}
public abstract class ServiceBase : IServiceBase
{
    void Method_A()
    {
        ... implementation here ...
    }
    void Method_B()
    {
        ... implementation here ...
    }
}
public class Service1 : ServiceBase, IService1
{
    void Method_X1()
    {
        ... implementation here ...
    }
}
public class Service2 : ServiceBase, IService2
{
    void Method_X2()
    {
        ... implementation here ...
    }
}

有人叫我!?: -)

如果你有一个接口

public interface IServiceA
{
  void Method_A();
  void Method_B();
  void Method_X1();
}

和第二个

public interface IServiceB
{
  void Method_A();
  void Method_B();
  void Method_X2();
}

你完全可以在服务器端共享这两个常用方法的实现代码。

您将在服务器上创建两个类MethodAHandlerMethodBHandler,在一个公共类库中(或在两个单独的公共程序集中),然后您可以使用以下内容:

using MethodHandlers;  // contains the two method handlers
public class ServiceA : IServiceA
{
   public void Method_A()
   {
       MethodAHandler hnd = new MethodAHandler();
       hnd.HandleMethodCall();
   }
   public void Method_B()
   {
       MethodBHandler hnd = new MethodBHandler();
       hnd.HandleMethodCall();
   }
   public void Method_X1()
   {
       // handle method X1 call here or delegate to another handler class
   }
}

第二个服务:

using MethodHandlers;  // contains the two method handlers
public class ServiceB : IServiceB
{
   public void Method_A()
   {
       MethodAHandler hnd = new MethodAHandler();
       hnd.HandleMethodCall();
   }
   public void Method_B()
   {
       MethodBHandler hnd = new MethodBHandler();
       hnd.HandleMethodCall();
   }
   public void Method_X2()
   {
       // handle method X2 call here or delegate to another handler class
   }
}

在服务器端,你有。net类,你完全可以通过一个公共类库或任何你认为最适合你的方法在两个独立的服务实现之间共享代码。