服务先生,暴露这种方法或我不会打电话给你,真诚的远程程序

时间:2014-07-22 15:30:58

标签: c# web-services wcf design-patterns soa

我必须开发一种大软"和较小的" satellite-Adapter" 服务(远程),大软可以调用。

每个" satellite-Adapter" 实现相同的方法

我需要的是从大软件提供一个契约接口(method_names,对象作为参数发送,对象作为返回接收)每个"卫星 - 适配器" 服务默认实施,以便被大软件调用。这样我可能只开发一次大软件,并可以添加新适配器作为插件。

同时调用之后开发的新适配器应该只是URI更改。

问题:

  1. 是否有解决此问题的SOA模式?这是否有我可以在网上寻找的名字?
  2. 如果它不是一种模式,它肯定听起来像以前需要的东西。我在哪里可以找到用C#解决的例子?
  3. 你能指导我在网上解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

您使用interface定义合约:

public interface IMyContract {

    // Methods, properties, etc. that the contract needs defined
}

您的不同“卫星适配器”服务以这种方式实施合同:

public class MySuperDuperService : IMyContract {

    // Properties & methods particular to what this service does.
    // You must provide an implementation for every property & method defined by IMyContract in here, too.
}

您的“大软”程序可以有一个属性或多个属性,这些属性包含对实现interface的类的实例的引用,或者它可以具有传递对实现的对象的引用的方法服务:

public class BigSoft {

    public IMyContract SatelliteAdapter { get; set; }

    public void DoSomething( IMyContract adapter ) {
        // code here
    }

}

等等。通过这种方式,BigSoft并不了解每个服务的功能,但它可以使用其中的任何一个,因为它希望每个服务具有相同的方法和优点。属性,他们这样做。编译器不会构建可执行文件,直到所有属性和& IMyContract interface中定义的方法在每个卫星适配器类中定义。

您应该知道的另一件事:一个类只能从一个类下降,但它可以实现您想要的所有接口。也就是说,

public class MyService : ServiceBase, IMyContract1, IMyContract2 { . . . }

仅在以下情况下完全合法:

  • 逗号分隔列表中的所有内容都是界面,或
  • ServiceBase是一个类,IMyContract1,IMyContract2是接口。

一个常见的惯例是使用大写“I”作为所有interfaces的第一个字母,这就是我在示例中所做的,所以你可以查看代码和&知道ServiceBase必须是一个类,其他两个必须是interfaces。此外,如果要从现有类下降新类,则超类名必须在列表中的第一位。