我可以在Windows服务中托管WCF服务吗?

时间:2011-03-10 23:41:14

标签: .net wcf

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

3 个答案:

答案 0 :(得分:5)

创建Windows服务项目。

将您的WCF服务添加到此项目中。

在主Windows Service类(默认为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

答案 1 :(得分:0)

您需要创建一个Windows服务项目,然后添加对WCF服务的引用并托管它。要安装该服务,您不需要visual studio,您需要使用installutil.exe

看看here

答案 2 :(得分:0)

查看TopShelf库。我用它来创建一些WCF服务。

提示:如果您打算编写更多WCF服务,那么在阅读端口共享时可能是值得的。