自托管MVC 5项目

时间:2015-04-10 08:53:46

标签: c# asp.net asp.net-mvc

嘿,您知道如何在桌面上运行没有IIS或IIS Express的MVC 5项目吗?

在ASP.NET vNext中有一个WebListener可以实现,但是我无法将我的项目重新组织到ASP.NET vNext。

是否有可能运行MVC 5项目以及ASP.NET vNext?

2 个答案:

答案 0 :(得分:3)

看起来不像其他答案实际上回答了你的问题。简短的回答是不,你不能自己主持MVC 5,因为它依赖于IIS。如果您需要自托管Web应用程序,则必须将现有应用程序移植到例如Nancy,或者等待MVC 6的发布,而MVC 6确实可以自托管。或者,您可以查看Web Api,其中当前版本也可以自托管。

答案 1 :(得分:0)

看看OWIN。它允许在您自己的应用程序中实例化您自己的小型Web服务器。

这已经通过WebApp.Start()方法在.Net框架中提供。

您只需创建一个包含匹配Configuration方法的类,该方法填满IAppBuilder,然后您就完成了。

public class OwinStartup
{
    private static IDisposable _Server;

    public void Configuration(IAppBuilder appBuilder)
    {
        HttpConfiguration config = new HttpConfiguration();
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        config.Formatters.Insert(0, new JsonpFormatter());
        appBuilder.UseWebApi(config);
    }

    public static void Start()
    {
        // If the Start() method throws an exception, the problem
        // is a missing right. The url has to be registered somewhere
        // deep down in windows and this is only allowed by the admin.
        // But you can change this rule to allow this registration for
        // anybody by running the below command within a command prompt
        // with admin rights:
        // netsh http add urlacl url=http://+:14251/ user=Everyone
        // Depending on your OS language the group name can differ.

        string baseAddress = "http://+:26575/";

        try
        {
            _Server = WebApp.Start<OwinStartup>(url: baseAddress);
        }
        catch (HttpListenerException ex)
        {
            _Log.Message(Severity.Fatal, "Could not start web api listener.", ex);
            _Log.Message(Severity.Notice, "This normally happens cause the application is not allowed to add a web listener.");
            _Log.Message(Severity.Debug, "Open up a command prompt with admin rights and execute the following command: \"netsh http add urlacl url="+ baseAddress +" user=Everyone\"");
        }
    }

    public static void Stop()
    {
        if(_Server != null)
        {
            _Server.Dispose();
            _Server = null;
        }
    }
}