WebApi系列~自主宿主HttpSelfHost的实现

424 篇文章 1 订阅
348 篇文章 0 订阅
WebApi系列~自主宿主HttpSelfHost的实现

回到目录

宿主一词我们不会陌生,它可以看作是一个基础设施,它为一些服务和功能提供最底层的支持,如你的web应用程序可以运行在iis或者apache上,而这两个东西就是web应用程序的宿主,而今天说的自主宿主SelfHost就是说,它可以自己去监听自己的服务,如你可以把一个web应用程序宿主到一个console控制台程序上,或者把一个webApi宿主到一个console或者windowService上,这都是可以的。

一 需要添加一些程序集引用

二 代码实现

  

复制代码
   #region Web Api监听
            Assembly.Load("Lind.DDD.TestApi");  //手工加载某个api程序集的controller
            var config = new HttpSelfHostConfiguration("http://localhost:3333");
            config.Routes.MapHttpRoute("default", "api/{controller}/{id}", new { id = RouteParameter.Optional });
            var server = new HttpSelfHostServer(config);
            server.OpenAsync().Wait();
            Console.WriteLine("Server is opened");
   #endregion
复制代码

 三   web api代码

复制代码
 /// <summary>
    /// 测试webapi
    /// </summary>
    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 "value";
        }

        // POST api/<controller>
        public void Post([FromBody]Demo value)
        {
            Thread.Sleep(10000);
            Logger.Core.LoggerFactory.Instance.Logger_Info(value.ToString());
        }

        // PUT api/<controller>/5
        public void Put(int id, [FromBody]string value)
        {
        }

        // DELETE api/<controller>/5
        public void Delete(int id)
        {
        }
    }
    public class Demo
    {
        public string appName { get; set; }
        public string url { get; set; }
        public override string ToString()
        {
            return string.Format("appName:{0},url:{1},datetime:{2}", this.appName, this.url, DateTime.Now);
        }
    }
复制代码

四   测试

回到目录

    支付宝扫一扫,为大叔打赏

作者: 仓储大叔大叔博客园
出处: http://www.cnblogs.com/lori/ 欢迎转载,但任何转载必须保留完整文章,在显要地方显示署名以及原文链接。如您有任何疑问或者授权方面的协商,请 给我留言
2
0
« 上一篇: 我心中的核心组件(可插拔的AOP)~第十五回 我的日志组件Logger.Core(策略,模版方法,工厂,单例等模式的使用)
» 下一篇: 知方可补不足~利用LogParser将IIS日志插入到数据库
posted @ 2014-11-25 10:48 张占岭 阅读( 4990) 评论( 9) 编辑 收藏
  
#1楼 2014-12-16 03:09 文楚  
请问如何自托管一个 http文件服务器,就像一个简单的iis
http://pic.cnblogs.com/face/28457/20141210231443.png
  
#2楼 [ 楼主] 2014-12-16 17:59 张占岭  
@ 文楚
可以自己用node.js写一套简单的...
https://i-blog.csdnimg.cn/blog_migrate/85eb1ce0ea538981f94afb1fba40f1de.png
  
#3楼 2014-12-19 01:20 文楚  
就是想一个dll解决问题TT方便嵌入啊。
http://pic.cnblogs.com/face/28457/20141210231443.png
  
#4楼 [ 楼主] 2014-12-19 08:42 张占岭  
@ 文楚
那还真不行,一个exe或者window服务,做个自宿主是可以的。
https://i-blog.csdnimg.cn/blog_migrate/85eb1ce0ea538981f94afb1fba40f1de.png
  
#5楼 2014-12-19 12:43 文楚  
@ 张占岭
因为当前我用的是winform,要给客户安装,客户要有一个极其简单的服务器功能,部署node很不便,windows服务的话又怕将来对升级有影响 现在的是自己写了一个简单实现简易 iis的一个http文件分发,又开了一个wcf的selfhost,结果就是监听不同的端口,总觉得特别别扭啊。。。
最后说一下iis,我直接用httpserver去做个一个监听,对于小文件又进行了缓存,竟然在静态文件并发上超不过iis,看来iis确实不是这么简单。
http://pic.cnblogs.com/face/28457/20141210231443.png
  
#6楼 2015-04-24 13:58 囧月言炎  
通俗易懂。
http://pic.cnblogs.com/face/509118/20130804143859.png
  
#7楼 2015-08-22 15:07 422159763  
这样用处不大吧。。干嘛不托管在IIS上,可以是局域网服务器也可以是外网服务器。
http://pic.cnblogs.com/face/u338465.jpg?id=07203723
  
#8楼 2016-05-01 19:12 15279124759  
我想说的是你这程序真的能正常运行,host一运行马上就结束了,别坑人
  
#9楼 3437632 2016/5/23 19:33:34 2016-05-23 19:33 hahanonym  
MapHttpRoute这里有个坑,没有标注action,那么控制器里面的actionName没有办法识别。
作为一个只写winform的遇到这个坑还是栽了
http://pic.cnblogs.com/face/575424/20131018234658.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值