zhifu

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

概要:

  最近实现了一个API,该服务是host在linux服务器上的,基于于nginx+mono, 整个开发过程都是在mac上完成的,所以我用的IDE是Xamarin。

 

说到异步编程,我们就会想到 async 和 await关键字,用这两个关键字使异步变得非常的简单。为什么要用异步,我来讲个故事, 在一服务器上,它维护的线程是有限的,比如.net 4.5 framework, 线程池可维护的最大线程数大约是5000,假如我用同涉请求,当并发达到最大值时,服务器不会再响应请求,这样服务器就会返回503(sever too busy), 并且当并发增加时,服务器的响应速度越来越慢,因为多开一个线程大约要消耗内存,但是如果我们使用异步的话,处理同样的并发,线程就要少很多,因为它不会一直占用一个线程。故事就扯到这里,下面我们就来创建一下WebAPI项目

 

1,打开Xamarin Studio,创建一个基于C#的一个MVC项目(我用的是.net framework 4.5)

  在Xamarin里没有WebAPI的模板,我们得手动引用类库

2,用NuGet引用Microsoft.AspNet.WebApi的库

3,创建一个名叫 AsyncController 类,引用System.Web.Http, 继承ApiController 如下代码

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Threading.Tasks;

namespace ThreadProcess.Controllers
{
	public class AsyncController : ApiController
    {
		[System.Web.Http.AcceptVerbs("GET","POST")]
		public async Task<IList<string>> GetProducts()
        {
			await Task.Delay(4000);
			return new List<string>{"test1:","test2" };
        }
    }
}

 

4,增加一个 MapHttpRoute 在Global.asax里

 

public static void RegisterRoutes (RouteCollection routes)
		{
			routes.IgnoreRoute ("{resource}.axd/{*pathInfo}");

			routes.MapHttpRoute(
				name: "DefaultApi",
				routeTemplate: "api/{controller}/{action}/{id}",
				defaults: new { id = RouteParameter.Optional }
			);
			routes.MapRoute (
				"Default",
				"{controller}/{action}/{id}",
				new { controller = "Home", action = "Index", id = "" }
			);
		}

 

 

经过上面的4步,我们的WebAPI环境就弄好了。

 

posted on 2015-07-07 22:49  zhifu  阅读(446)  评论(0编辑  收藏  举报