Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用自托管NancyFX web界面控制Windows服务(启动、停止等…)_C#_Wcf_Windows Services_Nancy_Self Hosting - Fatal编程技术网

C# 使用自托管NancyFX web界面控制Windows服务(启动、停止等…)

C# 使用自托管NancyFX web界面控制Windows服务(启动、停止等…),c#,wcf,windows-services,nancy,self-hosting,C#,Wcf,Windows Services,Nancy,Self Hosting,我的目标是为windows服务创建一个简单的web界面,允许我使用web浏览器与该服务交互 通过交互,我的意思是通过在html页面中按下按钮,我将能够调用服务类中定义的Stop()方法。(或任何其他可用方法) 我有一个类将被托管在ServiceHost中,作为Windows服务运行。 层次结构如下所示: public interface IMyServiceInterface { string Name { get; set; } void Stop(); }

我的目标是为windows服务创建一个简单的web界面,允许我使用web浏览器与该服务交互

通过交互,我的意思是通过在html页面中按下按钮,我将能够调用服务类中定义的
Stop()
方法。(或任何其他可用方法)

我有一个类将被托管在ServiceHost中,作为Windows服务运行。 层次结构如下所示:

public interface IMyServiceInterface
{
        string Name { get; set; }
        void Stop();
}

public class MyServiceBase : IMyServiceInterface
{
  string sName;
  public string Name
  {
    get {return sName; }
    set {sName = value;}
  }

  public virtual void Stop() {}
}

public class dbSynchronizer : MyServiceBase 
{
   public dbSynchronizer()
   {
      this.Name = "dbSynchronizer_01";
   }

   public override void Stop()
   {
      base.Stop();
    }
}
启动主机的代码:

文件:Program.cs

static void Main(string[] args)
{
   ServiceBase[] ServicesToRun; 
   ServicesToRun = new ServiceBase[]
   {
     new dbSynchronizerService()
   };
   ServiceBase.Run(ServicesToRun);
}
public partial class dbSynchronizerService : ServiceBase
{    
   NancyHost nancyHost;
   dbSynchronizer  dbSynchronizerService;

   protected override void OnStart(string[] args)
   {

      dbSynchronizerInstance = new dbSyncronizerLib.dbSynchronizer();

      CustomBootstrapper _custBootStrapper = new CustomBootstrapper();
      nancyHost = new Nancy.Hosting.Self.NancyHost(new                 Uri("http://localhost:9664"), _custBootStrapper);                

      if (nancyHost != null)
          nancyHost.Start();

      sHost = new ServiceHost(dbSynchronizerInstance);
      sHost.Open();           
     }    
}
文件:dbSynchronizerService.cs

static void Main(string[] args)
{
   ServiceBase[] ServicesToRun; 
   ServicesToRun = new ServiceBase[]
   {
     new dbSynchronizerService()
   };
   ServiceBase.Run(ServicesToRun);
}
public partial class dbSynchronizerService : ServiceBase
{    
   NancyHost nancyHost;
   dbSynchronizer  dbSynchronizerService;

   protected override void OnStart(string[] args)
   {

      dbSynchronizerInstance = new dbSyncronizerLib.dbSynchronizer();

      CustomBootstrapper _custBootStrapper = new CustomBootstrapper();
      nancyHost = new Nancy.Hosting.Self.NancyHost(new                 Uri("http://localhost:9664"), _custBootStrapper);                

      if (nancyHost != null)
          nancyHost.Start();

      sHost = new ServiceHost(dbSynchronizerInstance);
      sHost.Open();           
     }    
}
在为Nancy定义的main模块中,我需要访问dbSynchronizer类的当前isntance(当前在服务主机中执行),以访问方法和属性。 首先,我只需要一个简单的视图来显示服务的名称,如下所示:

文件:MainModule.cs

public class MainModule : NancyModule
    {
        public IMyServiceInterface _myService;

        public MainModule(IMyServiceInterface _service)
        {
            _myService= _service;

            Get["/"] = x =>
            {

                var model = new ConfigStatusModel
                {
                    Message = String.IsNullOrEmpty(_service.Name) ? "Cannot get service name" : _service.Name
                };

                return View["index.html", model];
            };
        }
    }
在这一步之后,我还想发布一些其他模块的帖子,以调用方法,如
Stop()
或任何其他应该由人工干预触发的方法:
DoSyncDb(),CleanTable()。

此时,当运行服务并请求
http://localhost:9664/
我在附加到视图的模型中获取“无法获取服务名称”值

有人能告诉我我做错了什么,或者给我指一个工作样本吗?或者告诉我怎样才能正确地实现我上面所描述的

多谢各位