加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

vb.net – Windows服务:同一服务类的多个实例?

发布时间:2020-12-17 00:19:13 所属栏目:大数据 来源:网络整理
导读:创建 Windows服务时,您将创建要启动的服务列表.默认是这样的: ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service} 你能拥有相同Service类的多个实例(绑定到不同的地址或端口),像这样吗? ServicesToRun = New System.ServiceProcess.S
创建 Windows服务时,您将创建要启动的服务列表.默认是这样的:
ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service}

你能拥有相同Service类的多个实例(绑定到不同的地址或端口),像这样吗?

ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service("Option1"),New Service("Option2")}

或者会导致问题吗?我们应该使用两个不同的类吗?解决这个问题的最佳方法是什么?

服务本身不会绑定到地址或端口.您可以使服务启动线程或任务执行,因此一个服务可以启动线程以侦听例如http和其他地址:端口或任何你想要它做的事情.

以下示例显示了我的意思,它在C#中,但如果它不能很好地转换为您,则使用this to translate.在您的情况下,我的主要功能将是您的服务的启动功能.

public abstract class ServiceModuleBase
{
    public abstract void Run();
}

public class SomeServiceModule : ServiceModuleBase
{
   //Implement Run for doing some work,binding to addresses,etc.
}

public class Program
{

    public static void Main(string[] args)
    {

        var modules = new List<ServiceModule> {new SomeServiceModule(),new SomeOtherServiceModule()};

        var tasks = from mod in modules
                    select Task.Factory.StartNew(mod.Run,TaskCreationOptions.LongRunning);

        Task.WaitAll(tasks.ToArray());


        Console.Out.WriteLine("All done");
        Console.ReadKey();


    } 
}

另外,here is a nice summary为什么你的第一种方法不起作用,以及如何解决这个问题的另一种方法

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读