1

我有一个执行一项特定工作的 Windows 服务。现在,如果有两个或更多实例(假设地说),每个实例只会在配置上有所不同,但它们基本上会做相同的工作。他们只会根据配置引用不同的数据库、表。

但我正在寻找一种方法来增加/减少此类服务的实例?正在寻找一个小型架构来管理这个......

PS:在windows azure中做这个很简单;不同之处在于您将增加/减少 VM 实例的数量,并且您可以在数据库中配置每个 VM 实例应该做什么。

4

1 回答 1

2

我认为您面临的问题是多个服务实例不能共享相同的名称。我解决这个问题的方法是以不同的名称安装实例。您可以让您的服务安装程序类吸收一个参数:

[RunInstaller(true)]
public partial class ProjectInstaller : Installer
{
    public ProjectInstaller()
    {
        InitializeComponent();
    }
    public override void Install(IDictionary stateSaver)
    {
        ResolveServiceName();
        base.Install(stateSaver);
    }

    private void ResolveServiceName()
    {
        serviceInstaller1.ServiceName = Context.Parameters["ServiceName"];
        serviceInstaller1.DisplayName = Context.Parameters["ServiceName"];
    }
    public override void Uninstall(IDictionary savedState)
    {
        ResolveServiceName();
        base.Uninstall(savedState);
    }
}

当你安装服务时,你提供ServiceName参数:

installutil.exe /ServiceName=foo YourService.exe
于 2012-09-03T05:58:36.193 回答