以Self Host的方式来寄宿Web API
Common类及实体定义、Web API的定义请参见我的上一篇文章:以Web Host的方式来寄宿Web API。
一、以Self Host寄宿需要新建一个Console控制台项目(SelfHost)
这个项目也需要引用之前定义的WebApi项目或者把WebApi.dll放到此项目的执行Bin目录下,
另外,需要引用的DLLs如下:
- System.Web.Http.dll (C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies\System.Web.Http.dll)
- System.Web.Http.WebHost.dll(C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies\System.Web.Http.WebHost.dll)
- System.Net.Http.dll(C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\System.Net.Http.dll)
具体代码如下:
using System;
using System.Reflection;
using System.Threading.Tasks;
using System.Web.Http;
using System.Web.Http.SelfHost; namespace SelfHost
{
internal static class Program
{
private static void Main(string[] args)
{
// 加载包含Web API的程序集
Assembly.Load("WebApi, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"); // 采用BaseAddress来初始化HTTP服务的配置类
var configuration = new HttpSelfHostConfiguration("http://localhost/selfhost"); // 生成直接侦听HTTP的Server实例
using (var httpServer = new HttpSelfHostServer(configuration))
{
// 注册路由
httpServer.Configuration.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}", new { id = RouteParameter.Optional });
var task = httpServer.OpenAsync();
if (task.Status == TaskStatus.WaitingForActivation)
{
Console.WriteLine("Http Server started!");
}
Console.Read();
}
}
}
}
WCF服务寄宿的时候我们必须指定寄宿服务的类型,但是对于ASP.NET Web API的寄宿来说,不论是Web Host还是Self Host我们都无须指定IHttpController的类型。也就是说,WCF服务寄宿是针对具体某个服务类型的,而ASP.NET Web API的寄宿则是批量的。ASP.NET Web API的批量寄宿源自它对HttpController类型的智能解析,它会从程序集列表中解析出所有的HttpController类型。对于WebHost来说,它会利用BuildManager来获得当前项目直接或者间接引用的程序集,但是对于Self Host来说,类型的解析在默认情况下只会针对加载到当前应用程序域中的程序集列表。
二、测试
把SelfHost项目设置为启动项目,Ctrl+F5执行程序;


以Self Host的方式来寄宿Web API的更多相关文章
- 以Web Host的方式来寄宿Web API
一.新建一个Common的类库项目并新建一个测试用的Contact实体类 namespace Common { public class Contact { public string Id { ge ...
- 用Owin Host实现脱离IIS跑Web API单元测试
开发笔记:用Owin Host实现脱离IIS跑Web API单元测试 今天在开发一个ASP.NET Web API项目写单元测试时,实在无法忍受之前的笨方法,决定改过自新. 之前Web API的单 ...
- 开发笔记:用Owin Host实现脱离IIS跑Web API单元测试
今天在开发一个ASP.NET Web API项目写单元测试时,实在无法忍受之前的笨方法,决定改过自新. 之前Web API的单元测试需要进行以下的操作: 初始配置: 1)在IIS中创建一个站点指定We ...
- 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用
由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.NET Web API 的书籍少之又少(我们看到的相关内容往往是某本介绍ASP.NET M ...
- 一个ASP.NET Web API 2.0应用
在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用 由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.N ...
- ASP.NET Web API路由系统:Web Host下的URL路由
ASP.NET Web API提供了一个独立于执行环境的抽象化的HTTP请求处理管道,而ASP.NET Web API自身的路由系统也不依赖于ASP.NET路由系统,所以它可以采用不同的寄宿方式运行于 ...
- Self Host模式下的ASP. NET Web API是如何进行请求的监听与处理的?
构成ASP.NET Web API核心框架的消息处理管道既不关心请求消息来源于何处,也不需要考虑响应消息归于何方.当我们采用Web Host模式将一个ASP.NET应用作为目标Web API的宿主时, ...
- ASP.NET Web API 框架研究 Web Host模式路由及将请求转出到消息处理管道
Web Host 模式下的路由本质上还是通过ASP.NET 路由系统来进行路由的,只是通过继承和组合的方式对ASP.NET路由系统的内部的类进行了一些封装,产生自己专用一套类结构,功能逻辑基本都是一样 ...
- [ASP.NET Web API]如何Host定义在独立程序集中的Controller
通过<ASP.NET Web API的Controller是如何被创建的?>的介绍我们知道默认ASP.NET Web API在Self Host寄宿模式下用于解析程序集的Assemblie ...
随机推荐
- jquerymobile标签-属性手册
Button data-role="button" data-corners true | false data-icon home | delete | plus | arr ...
- js 事件捕获与事件冒泡例子
http://codepen.io/huashiyiqike/pen/qZVdag addEventListener 默认是冒泡阶段执行,也就是父亲与子都监听时,点击子,子先处理,父亲再处理,这时加s ...
- Dennis与Ken爷爷的UNIX/C世界
沉寂了很久了,时间在不断地逝去,转眼又到了新的一年,2013的发生了太多,Beta版本.辞职.职位转换.ARM.Driver.初级厨艺.Dx11.GPU.CPU.登山.GNU/Linux.Cross ...
- Tomcat自动部署
在Tomcat的server.xml配置文件中部署 1.在Tomcat下,找到conf文件下的server.xml,打开. 2.在<Host>和</host>之间加上如下代码: ...
- 用CSS让未知高度内容垂直方向居中
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...
- Linux高级编程--09.线程互斥与同步
多个线程同时访问共享数据时可能会冲突,比如两个线程都要把某个全局变量增加1,这个操作在某平台需要三条指令完成: 从内存读变量值到寄存器 寄存器的值加1 将寄存器的值写回内存 假设两个线程在多处理器平台 ...
- C#中,接口不能被实例化,但存在特例
看一个例子: interface IFoo { string Message { get; } } 则, IFoo obj = new IFoo("abd"); 将会报错:接口不能 ...
- nodejs之获取客户端真实的ip地址+动态页面中引用静态路径下的文件及图片等内容
1.nodejs获取客户端真实的IP地址: 在一般的管理网站中,尝尝会需要将用户的一些操作记录下来,并记住是哪个用户进行操作的,这时需要用户的ip地址,但是往往当这些应用部署在服务器上后,都使用了ng ...
- 转载--CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡
源地址:http://www.cnblogs.com/mchina/archive/2012/08/27/2644391.html 一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台: ...
- [前端]npm安装慢,换用淘宝的镜像
镜像使用方法(三种办法任意一种都能解决问题,建议使用第三种,将配置写死,下次用的时候配置还在): 通过config命令 npm config set registry https://registry ...