【问题标题】:Topshelf service/app stuck at "Creating"Topshelf 服务/应用程序停留在“正在创建”
【发布时间】:2012-07-23 17:59:10
【问题描述】:

我正在尝试启动 Topshelf 的一个实例。我已经下载了 v. 2.3 的二进制文件并提取了所有内容。

然后我创建了一个空的控制台应用程序。我已将框架更改为.NET 4.0 framework,并将以下代码添加到我的static void Main() 方法中:

Host h = HostFactory.New(x =>
{
    x.Service< MyApp>(s =>
        {
            s.SetServiceName("Something");
            s.ConstructUsing(name => new MyApp());
            s.WhenStarted(tc => tc.Start());
            s.WhenStopped(tc => tc.Stop());
        });

    x.RunAsLocalSystem();

    x.SetDescription("Something");
    x.SetDisplayName("Something");
    x.SetServiceName("Something");
});

h.Run();

当我按 F5 时,consoleapp 按预期运行。

然后我将 bin/release 输出复制到 topshelf/services/test 目录并运行 Topshelf.Host.exe。这是结果:

如果我将浏览器指向仪表板,我会看到以下内容:

“测试”服务一直说“正在创建”(等待超过 15 分钟)。

我做错了什么?我尝试过多种控制台应用程序。如果我在控制台应用程序上调用install,应用程序就会成功注册。

提前致谢!

【问题讨论】:

  • 您是否记得正确命名配置文件。似乎配置文件必须在文件夹之后完全命名。因此,如果文件夹是 test,则配置文件必须是 test.config。或者相反,如果配置文件是“MyAssembly.dll.config”,则文件夹必须称为“MyAssembly.dll”(是的,包括 .dll)。

标签: c# topshelf


【解决方案1】:

当您将 Topshelf DLL 链接到您的控制台应用程序时,您应该从命令行运行您的控制台应用程序。据我所知,您正在尝试使用 Topshelf 主机。尝试运行您的控制台应用程序,您应该会看到它正确启动了您的服务。

【讨论】:

  • 我不明白。我不想手动运行我的控制台应用程序。我期待 Topshelf 能够处理这个问题,监听 /services 目录的更改,让我将多个应用程序作为 Windows 服务运行等等。这不是 Topshelf 的目的,还是?谢谢! :-)
  • Topshelf 提供的功能之一是搁架功能。这是 Topshelf.Host 的责任。这就是发帖人要问的问题,因此从命令行运行服务的可能性是无关紧要的。我也有完全一样的问题。它可以独立运行,但是当我尝试将其作为架子运行时,它会爆炸。
  • 好吧,搁置是一个损坏的功能,它已从 3.0 版本中删除。在同一进程空间中运行不同服务的问题太多,并且普遍缺乏对如何处理线程中的异常的理解。因此,我们将其拉出并将 Topshelf 简化为轻松创建服务所需的最小功能集(这是最初的章程)。
猜你喜欢
  • 1970-01-01
  • 2013-08-14
  • 2022-12-12
  • 2018-12-04
  • 2013-06-23
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
  • 1970-01-01
相关资源
最近更新 更多