在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语句,可能会出现您没有看到的错误