首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MVC6作为视窗服务安装(ASP.NET核心1.0.0)

MVC6作为视窗服务安装(ASP.NET核心1.0.0)
EN

Stack Overflow用户
提问于 2015-05-17 00:20:43
回答 4查看 5.2K关注 0票数 17

更新-2016年7月26日

在下面的答案中,我已经在ASP.NET Core 1.0.0中添加了解决方案。

我已经创建了一个简单的MVC6应用程序,并包含了Microsoft.AspNet.WebListener库,这样我就可以在IIS之外托管。

来自project.json:

"dependencies": {
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta4",
    "Microsoft.AspNet.Mvc": "6.0.0-beta4"
},

"commands": {
    "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000"
}

当我发布这篇文章时,我可以运行web.cmd文件,并在控制台窗口中运行站点。太棒了!

但在OWIN中,您可以使用TopShelf从控制台应用程序启动web应用程序。然后可以将其构建为可执行文件,并作为Windows服务进行安装。

有没有办法用ASP.NET 5MVC6Web应用来做到这一点呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-07-26 15:44:16

从最新的ASP.NET核心版本1.0.0库开始,这在某种程度上得到了简化。

ASP.NET GitHub page上有一个关于这个话题的公开讨论。

所有的Windows应用程序现在都是控制台应用程序,并且有一个新的库可以作为ASP.NET服务托管在完整的.NET框架上(这是有意义的,因为整个问题都假设是一个Windows web服务器)。

我们需要创建一个新的ASP.NET Core Web Application (.NET Framework)

检查project.json文件,确保"frameworks“部分如下:

"frameworks": {
    "net461": {}
},

然后,我们需要添加服务托管库Microsoft.AspNetCore.Hosting.WindowsServices,并保存project.json以恢复包。

然后我们需要编辑program.cs文件并添加在调试中运行和作为服务运行的路径,代码如下:

    public static void Main(string[] args)
    {
        var isDebug = Debugger.IsAttached || ((IList)args).Contains("--debug");
        string runPath;

        if (isDebug)
            runPath = Directory.GetCurrentDirectory();
        else
        {
            var exePath = Process.GetCurrentProcess().MainModule.FileName;
            runPath = Path.GetDirectoryName(exePath);
        }

        var host = new WebHostBuilder()
                        .UseKestrel()
                        .UseContentRoot(runPath)
                        .UseStartup<Startup>()
                        .Build();

        if (isDebug)
            host.Run();
        else
            host.RunAsService();
    }

.RunAsService()方法是由Microsoft.AspNetCore.Hosting.WindowsServices库提供的扩展方法。

要安装为服务,您只需在管理员命令提示符下运行以下命令:

SC Create <service-name> binPath= "[PublishOutputPath]\mvc6-example.exe"

请在我的GitHub repository上克隆并查看工作版本。

我希望这能有所帮助:)

票数 6
EN

Stack Overflow用户

发布于 2015-08-14 21:32:19

您可以将DNX应用程序作为Windows服务运行,但是,您不能直接运行CMD文件。你会得到一个错误信息:“服务没有及时响应启动或控制请求。”您可以直接指向dnx.exe并将项目文件夹和命令作为参数传递。

阅读这篇文章可以了解更多细节:http://taskmatics.com/blog/run-dnx-applications-windows-service/

一旦你设置好你的应用程序。您可以从服务的OnStart方法引导ASP.NET。为此,您可以使用Microsoft.AspNet.Hosting中的WebHostBuilder。

最后,你可以通过向Main方法传递一个参数(如'non-service')来确保应用程序仍然可以在VS中运行,并在调用ServiceBase.Run之前进行检查,如果存在,你可以直接调用OnStart。项目的属性为您提供了在VS中运行时传递参数的选项。

更新:

在上面的基础上有一个后续的帖子。它展示了如何在ASP.NET服务中运行带有静态文件的MVC5和MVC6。链接在这里:http://taskmatics.com/blog/host-asp-net-in-a-windows-service/

票数 10
EN

Stack Overflow用户

发布于 2015-05-17 03:25:11

更新:它看起来像there is going to be a Windows Service hosting option coming in with RC2。有关详细信息和this answer,请参阅this GitHub comment

恐怕这个问题的答案是否定的。我也一直在研究这一点,最好的方法是将您的项目部署到磁盘上的已知位置,并让Windows服务启动调用cmd文件的进程。这样,Windows服务将仅充当监视器。

我希望得到一些关于这方面的博客文章和样本,因为我一直在研究这方面的部署。这里还有一个公开的讨论:https://github.com/aspnet/Home/issues/465

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30277991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档