Web Api 宿主的搭建
首先我们要清楚一个概念,宿主。宿主是什么意思?先从了解一下Hosting开始吧!
有关Hosting的基础知识
Hosting是一个非常重要,但又很难翻译成中文的概念。翻译成:寄宿,大概能勉强地传达它的意思。我们知道,有一些病毒离开了活体之后就会死亡,我们把那些活体称为病毒的宿主。把这种概念应用到托管程序上来,CLR不能单独存在,它必须依赖于某一个进程,我们把这种状况称之为:CLR必须寄宿于某一个进程中,而那个进程就是宿主。
ASP.NET Core的一个大的改变就是就是将Web应用程序改成了自寄宿。什么意思呢?我们知道,在之前的ASP.NET版本中,ASP.NET的Web应用程序都是深度依赖IIS和Windows Server,以至于ASP.NET只能在Windows Server上运行。之所以出现这种情况,就是应为我们开发的所有Web应用程序都是寄宿在IIS进程中的。一般来说,一个进程只能加载一个CLR(不同进程之间可以加载不同的版本的CLR),为了托管多个Web应用程序,IIS使用了应用程序池这种东西来模拟进程的行为,从而为不同的Web程序加载不同的运行时来托管它们。
有关CLR和寄宿的知识,如果有兴趣,可以参阅《CLR via C#》。
我们可以查看一下以前版本的ASP.NET程序,它是没有Main()函数的,也就是说它没有程序入口点,不是单独的进程。对于应用程序开发来说,这个问题并不大,因为开发者在意的Web程序的逻辑、数据安全等问题,而不是应用程序如何被加载。但对于一个Web框架来说,这个问题非常严重,因为它高度依赖IIS和Windows Server,减少了它的适用范围。如果我们查看ASP.NET Core的程序,你会发现它本质上就是一个控制台程序,如果我们把那些在Main()函数中自动生成的代码都删掉(VS2015的模板会自带一些代码),加上Console.WriteLine("Hello World!"); 它就会在控制台中打出Hello World!由于ASP.NET Core的程序自身有程序入口点,所以自身就是一个进程,它可以为自己加载合适的CLR来运行Web应用,这种情况就是自寄宿。这么做的最大的好处就是可以脱离IIS,从而脱离Windows Server的桎梏。只要对应操作系统上有符合CLR规范的运行时,那ASP.NET Core的应用就可以部署在那个操作系统上。.NET Core里包含了微软开发的跨平台CLR运行时,可以运行在Windows,Linux和OSX上,借助它ASP.NET Core的应用程序就可以部署在这些操作系统上。
说到这里,就只能下最后一个问题,IIS还扮演什么角色?当应用部署在Windows上时,微软推荐将IIS通过ASP.NET Core Module(之前的HttpPlatformHandler)模块作为Web应用的反向代理服务器(reverse-proxy server)。这个服务器的作用就是将请求转发到Web应用真正的服务器:
- WebListener (只能在Windows平台)
- Kestrel (跨平台服务器,比WebListener功能稍弱)
前面上了那么多开胃菜,终于可以上正菜了,首先演示一下webapi 寄宿控制台程序。大家可以根据这个思路进行扩展,如:寄宿在跨平台的程序上;
首先进行nuget包的引用;
引用之后创建一个控制器代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http; namespace WebApi
{
public class UserController : ApiController
{
[HttpGet]
public string Get()
{
return "访问成功!";
} }
}
然后在控制台的main函数中进行调用
static void Main(string[] args)
{ //默认使用json返回数据而不论请求是不是application/xml
//GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
var config = new HttpSelfHostConfiguration("http://localhost:8080"); config.Routes.MapHttpRoute("ApiDefault", "api/{controller}/{id}", new { id = RouteParameter.Optional });
using (var server = new HttpSelfHostServer(config))
{
server.OpenAsync().Wait();
Console.WriteLine("开启webapi微服务");
Console.WriteLine("按Enter键退出");
Console.WriteLine("Press Enter To Quit");
Console.ReadLine();
} }
开启软件后,在游览器里面输入就可以进行访问了。
这是一个比较整活的一种方式,实际工作中建议还是用iis进行搭建,本人所用的是vs 2019和.net fromwork 4.7.2所写的程序;
最新文章
- vertical-align和line-height的那些事
- 升级CentOS内核 - 2.6升级到3.10
- sqlite3 not found问题解决方法
- 用Block封装ASIHttpRequest
- win7 64 旗舰版虚拟GPU-VMware下+vs2013安装caffe+matlab+python
- hdu 1576 A/B (扩展欧几里德简单运用)
- Django 学习笔记之三 数据库输入数据
- YII增加全局函数
- Mongodb实用网址记录
- 对Numpy广播操作的理解
- C#:StreamReader读取.CSV文件(转换成DataTable)
- [MySQL] 5.7版本以上group by语句报1055错误问题
- Python之路(第三十四篇) 网络编程:验证客户端合法性
- Windows Azure中国版试用
- zabbix server源码安装
- (转)MYSQL线程池总结(一)
- 软件魔方制作系统启动盘并安装win8系统
- wepy - 与原生有什么不同(事件更改)
- datagridview添加行
- pycharm激活地址
热门文章
- shopping cart
- 【数据结构与算法Python版学习笔记】树——平衡二叉搜索树(AVL树)
- RSA加密——前端JSEncrypt
- Prometheus基于文件的服务发现
- mybatis自定义分页拦截器
- 零基础入门之Linux进程基础
- 21.7.31 test
- 基于屏幕空间的实时全局光照(Real-time Global Illumination Based On Screen Space)
- 手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序
- 转:基于 xilinx vivado 的PCIE ip核设置与例程代码详解