在Windows服务中托管WCF服务

我在Windows服务中托管WCF服务时遇到了一些麻烦。 我可以在VS2008中启动我的WCF服务,并导航到app.config中的基地址

                              

我可以看到它工作正常,我得到的页面说我创建了一个服务,并显示了如何使用它的代码示例。

现在我的下一步是创建一个Windows服务来托管我上面显示的WCF。

我刚刚使用了te windows服务模板,它给了我一个Program.cs和Service1.cs,我将其重命名为WindowsServiceHost.cs。 在其中我有:

 private ServiceHost host; public WindowsServiceHost() { InitializeComponent(); } protected override void OnStart(string[] args) { try { var serviceType = typeof(Indexer.WCF.Indexer); host = new ServiceHost(serviceType); host.Open(); } catch (Exception ex) { } } protected override void OnStop() { if (host != null) { host.Close(); } } 

一切都编译得很好,我可以运行InstallUtil(我定义了一个安装程序)。 该服务用于立即启动和停止,但禁用Windows Defender摆脱了这一点。 现在服务启动(作为网络服务)并保持运行(我认为),但是当我导航到基地址时,我得到了未找到的页面。 另一个奇怪的事情是,当我尝试停止服务(仍然显示为正在运行)时,我得到:

错误1061:此时服务无法接受控制消息

我已经尝试了所有的东西,但我不知所措。

不是100%确定原因是什么 – 只是为了确认,我们一直在Windows服务中自我托管WCF服务,它通常运行得很好。

您可以尝试两点 – 只是为了了解行为的感觉和问题的潜在线索:

1)我注意到你只使用服务的类型打开ServiceHost – 这是有效的,但你可能仍然希望添加一个基地址甚至调用new ServiceHost() – 如下所示:

 host = new ServiceHost(serviceType, new Uri("http://localhost:8181/WCFService/Action/"); 

你能导航到那个地址并获得服务页面吗?

2)我注意到的另一件事是你的服务似乎在打开主机之前被称为Indexer.WCF.Indexer如typeof()中指定的那样,但是在配置文件中, 标签上的name=只是“ WCF.Indexer”。

您可以尝试将该标记更改为:

  

这有帮助吗? 您现在能够在浏览器中导航到服务页面时看到它吗?

Windows服务中的自托管HTTP可能需要使用HttpCfg.exe注册端点。 看看这里 。

尝试删除catch语句,可能会出现您没有看到的错误