zoukankan      html  css  js  c++  java
  • ASP.NET WebAPI自托管

       一般ASP.NET项目都是用IIS托管运行,ASP.NET Web Api除了常规的Web寄宿(IIS)外,还可以在.NET控制台、WinForms等程序中寄宿。

    转载请注明出处:https://www.cnblogs.com/lichu-lc/p/10923018.html

    下面讲一讲在控制台console中托管ASP.NET WebAPI的方式:

    1. 配置WCF自托管

     1) 新建控制台项目MyConsoleWebApi, 同时引用以下4个Web Api相关DLL:

    • System.Net.Http.dll
    • System.Web.Http.dll
    • System.Net.Formatting.Http.dll
    • System.Web.Http.SelfHost.dll

     引入这四个dll的简单方式是使用NuGet安装自托管WebAPI包(Microsoft.AspNet.WebApi.SelfHost)

    使用NuGet安装自托管WebAPI包(Microsoft.AspNet.WebApi.SelfHost)

    Microsoft.AspNet.WebApi.SelfHost包只有一个依赖:Microsoft.AspNet.WebApi.Core(>=5.2.7 && <5.3.0)

     2) 新建和编写Api类文件TestController.cs:

    using System.Collections.Generic;
    using System.Web.Http;
    
    namespace MyConsoleWebApi
    {
        public class TestController : ApiController
        {
            // GET api/<controller>
            public IEnumerable<string> Get()
            {
                return new string[] { "value1", "value2" };
            }
            // GET api/<controller>/5
            public string Get(int id)
            {
                return id.ToString();
            }
        }
    }

     3)  主程序Program.cs如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Web.Http;
    using System.Web.Http.SelfHost;
    
    namespace MyConsoleWebApi
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.Title = "Api Service";
    
                var config = new HttpSelfHostConfiguration("http://localhost:8801");
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new { id = RouteParameter.Optional });
                using (var svr = new HttpSelfHostServer(config))
                {
                    svr.OpenAsync().Wait();
                    Console.WriteLine("Web API service start.....");
                    Console.ReadLine();
                }
            }
        }
    }

     4) 运行服务并测试

    在浏览器中测试结果如下:

    2. 配置OWIN自托管

     1) 新建控制台项目MyConsoleWebApi, 同时使用NuGet安装自托管WebAPI包(Microsoft.AspNet.WebApi.OwinSelfHost)

    使用NuGet安装自托管WebAPI包(Microsoft.AspNet.WebApi.OwinSelfHost)

    Microsoft.AspNet.WebApi.SelfHost包有3个依赖:Microsoft.AspNet.WebApi.Owin(>=5.2.7 && <5.3.0)

                                                                                       Microsoft.Owin.Hosting(>=2.0.2)

                                                                                       Microsoft.Owin.Host.HttpListener(>=2.0.2)

                Microsoft.AspNet.WebApi.Owin 5.2.7 Dependencies:

                          - Microsoft.Owin(>=2.0.2)

                          - Microsoft.AspNet.WebApi.Core(>=5.2.7 && <5.3.0)

                          - Owin(>=1.0.0)

                Microsoft.Owin.Hosting 2.0.2 Dependencies:

                         - Microsoft.Owin(>=2.0.2)

                         - Owin(>=1.0.0)

               Microsoft.Owin.Host.HttpListener(2.0.2)  No dependencies.

     2) 新建和编写Api类文件TestController.cs 代码和上面一样。

     3) 新建和编写Startup类文件Startup.cs:

    using System.Web.Http;
    using Owin;
    
    namespace MyConsoleWebApi
    {
        class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                var config = new HttpConfiguration();
                config.Routes.MapHttpRoute(
                        name: "DefaultApi",
                        routeTemplate: "api/{controller}/{id}",
                        defaults: new { id = RouteParameter.Optional });
                app.UseWebApi(config);
            }
        }
    }

     4) 主程序Program.cs如下:

    using System;
    using Microsoft.Owin.Hosting;
    
    namespace MyConsoleWebApi
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (WebApp.Start<Startup>("http://localhost:8801/"))
                {
                    Console.WriteLine("WebAPI service --OWIN-- is running......");
                    Console.ReadLine();
                }
            }
        }
    }

     5) 运行服务并测试, 结果和上面WCF方式一致。

     6) 官网上写的也比较详细,请参考使用OWIN自承载Web API

     3. 选择WCF或OWIN自托管

    当ASP.NET MVC 4第一版发布WebAPI时,OWIN框架还没有进入1.0版本,所以ASP.NET团队决定重用WCF托管基础设施来进行自托管。OWIN(Open Web Interface for .NET)是定义Web应用程序的一种相对较新的方法,可以帮助将应用程序与托管环境和运行应用程序的Web服务器隔离开来,使得应用程序可以托管在IIS内、自定义Web服务器内。现在ASP.NET团队在很多产品上都大力推进OWIN托管,包括ASP.NET WebAPI。OWIN允许多个应用程序框架轻松并存,甚至允许那些应用程序共享相同的功能(叫做中间件),比如身份验证和缓存。

    总结下,新WebAPI项目建议选择OWIN。 不过使用WCF自托管也没有错。正如本文第二幅图中包的描述中所说,WCF自托管将作为"遗留"解决方案存在。

    NuGet总结:

    • WCF托管:NuGet安装Microsoft.AspNet.WebApi.SelfHost
    • OWIN托管:NuGet安装Microsoft.AspNet.WebApi.OwinSelfHost

    转载请注明出处:https://www.cnblogs.com/lichu-lc/p/10923018.html

    参考:ASP.NET Web Api 实践系列(一)自我寄宿https://www.cnblogs.com/huatao/p/4712848.html

              使用OWIN自承载Web API   https://docs.microsoft.com/en-us/aspnet/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api

  • 相关阅读:
    62. Unique Paths
    102. Binary Tree Level Order Traversal
    3、公共接口不应该使用太过频繁,当有大量类型实现公共接口时,应当避免通过公共接口调用对象
    2、Task 使用 ContinueWith 而不要使用 Wait
    1、使用 as 而不要用 is
    VS 超级好用的 Ctrl E E
    一个好用的分组算法2
    java 字典 map 和 list.forEach
    mongo windows 安装
    mongo repository
  • 原文地址:https://www.cnblogs.com/lichu-lc/p/10923018.html
Copyright © 2011-2022 走看看