【问题标题】:Can I host a WCF Service in a windows service?我可以在 Windows 服务中托管 WCF 服务吗?
【发布时间】:2011-07-13 03:27:54
【问题描述】:

我通过添加新项目 -> WCF 服务库创建了一个 WCF 项目,当我在开发环境中运行它时,它会打开 WCF 测试客户端。如何在未安装 Visual Studio 的服务器上安装此服务(我不想在 IIS 上托管它)。我应该编写一个新的 Windows 服务吗?

【问题讨论】:

    标签: .net wcf


    【解决方案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 服务,那么阅读端口共享可能是值得的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-23
        • 1970-01-01
        • 1970-01-01
        • 2020-11-24
        • 1970-01-01
        相关资源
        最近更新 更多