我可以在 Windows 服务中托管 WCF 服务吗?
Posted
技术标签:
【中文标题】我可以在 Windows 服务中托管 WCF 服务吗?【英文标题】:Can I host a WCF Service in a windows service? 【发布时间】:2011-07-13 03:27:54 【问题描述】:我通过添加新项目 -> WCF 服务库创建了一个 WCF 项目,当我在开发环境中运行它时,它会打开 WCF 测试客户端。如何在未安装 Visual Studio 的服务器上安装此服务(我不想在 IIS 上托管它)。我应该编写一个新的 Windows 服务吗?
【问题讨论】:
【参考方案1】:创建一个 Windows 服务项目。
将您的 WCF 服务添加到此项目。
在主 Windows 服务类(默认为 Service1.cs)中,添加一个成员:
internal static ServiceHost myServiceHost = null;
修改 OnStart() 以使用您的 WCF 服务类型启动新的 ServiceHost:
protected override void OnStart(string[] args)
if (myServiceHost != null)
myServiceHost.Close();
myServiceHost = new ServiceHost(typeof(MyService));
myServiceHost.Open();
修改 OnStop():
protected override void OnStop()
if (myServiceHost != null)
myServiceHost.Close();
myServiceHost = null;
将安装和部署项目(安装项目)添加到您的解决方案中。将该项目的输出设置为 Windows 服务项目的主要输出。构建安装和部署项目时,您应该会看到一个可用于安装服务的 Setup.exe 文件。
请记住,您仍然需要设置端点和绑定。考虑使用 nettcpbinding 进行此设置。
最后一点,如果您在安装后启动 Windows 服务时遇到问题,请参考:Error 5 : Access Denied when starting windows service。
【讨论】:
有什么理由myServiceHost
是内部的而不是私有的?
@ProfK 否。再说一次,我很久以前写过这个答案,所以当时可能有一个完整的上下文。【参考方案2】:
您需要创建一个 Windows 服务项目,然后添加对您的 WCF 服务的引用并托管它。安装服务不需要visual studio,需要使用installutil.exe
。
看看here。
【讨论】:
【参考方案3】:看看TopShelf 库。我用它创建了许多 WCF 服务。
提示:如果您打算编写更多 WCF 服务,那么阅读端口共享可能是值得的。
【讨论】:
以上是关于我可以在 Windows 服务中托管 WCF 服务吗?的主要内容,如果未能解决你的问题,请参考以下文章
Windows 服务可以使用由另一个 Windows 服务托管的 WCF 服务吗?
是否可以通过 httpwebrequest 使用 WCF 服务(托管为 Windows 服务托管)?
使用移动设备访问托管在 Windows 服务中的 WCF 服务