【问题标题】:Topshelf C# Windows Service - Cannot pass HostControlTopshelf C# Windows 服务 - 无法通过 HostControl
【发布时间】:2016-01-05 17:04:07
【问题描述】:

我正在尝试将 HostControl 实例传递给 topshelf 服务的启动方法,但出现以下编译器错误:

  • 并非所有代码路径都返回类型为 lambda 表达式的值
  • “HostSettings”不包含“ConstructUsing”的定义
  • “HostSettings”不包含“WhenStarted”的定义,也没有 扩展方法“WhenStarted”接受“HostSettings”类型的第一个参数 可以找到(您是否缺少 using 指令或程序集引用?)

我已经为 EventBroker 类实现了接口“ServiceControl”。

using Topshelf;
namespace Sample
{
  class Program
  {
    static void Main(string[] args)
    {
        HostFactory.Run(x =>
        {
            x.Service<EventBroker>(s =>
            {
                s.ConstructUsing(name => new EventBroker());
                s.WhenStarted((tc, hostControl) => tc.Start(hostControl));
                s.WhenStopped(tc => tc.Stop());
            });
            x.RunAsLocalSystem();

我是否遗漏了一些程序集参考或其他内容?我正在使用 TopShelf v3.3.154.0。如果没有“hostControl”,它可以正常工作。

【问题讨论】:

    标签: c# windows-services topshelf


    【解决方案1】:

    经过一些故障排除后,我发现“ServiceControl”没有正确实现。 EventBroker 的 Stop/Start 方法没有返回类型 (bool)。

    现在,使用以下停止/启动方法,它正在工作。

        bool Start(HostControl hostControl)
        {
            return true;
        }
    
        bool Stop(HostControl hostControl)
        {
            return true;
        }
    

    【讨论】:

    • 如果您的HostControl 根本没有实现Start()Stop() 方法,您也会收到此错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 2023-03-31
    • 2017-10-29
    相关资源
    最近更新 更多