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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM