如果想做一个分布式系统,肯定需要不同的机器来提供不同的服务,而有些基于http协议,有些tcp/ip协议,有些使用MSMQ通道,以往的技术实现起来比较容易,但是有一点是致命的:管理起来不方便。于是WCF顺势而出。但是使用一段时间后你会发现,你只是需要一点点,但是却有一堆臃肿的东西在你服务器上,于是wcfrest和WebApi顺势而出(其实是很原始的技术,只是换了一个马甲,重新封装了一下)。基础东西我就不介绍,主要说下实际应用的东西。
写博客一段时间,偶然百度下自己写的内容,发现各种爬虫把自己码的字都爬过去了。好吧,你赢了。此片博文特此感谢小蓝同学。好基友你们懂的。
Interface的定义:
定义一个很简单的方法,GetList。其实参数也可以使用这种方式:
那我为什么会选择上面的一种定义方式呢?我把BucketMessage这个Model的内容通知给客户端,每次请求都需要把这个Model全部参数传递上来。可能有人说这样会增加http请求的内容,但是我认为这样定义是为了所有接口的参数类型统一。至于你非要纠结那几个字段和网速性能方面,我只能说呵呵。
方法的实现如下:
接下来是选择Host的过程。刚开始我用IIS做宿主。于是,我果断开启苦比模式。
首先web.config的system.serviceModel节点:
参数说明:
AspNetCompatibilityEnabled:AppDomain(应用程序域)如果开启ASP.NET的兼容模式,则为true.
HelpEnabled:如果 WCF帮助页启用 则true
对于配置文件的管理,我个人倾向于把Config文件夹统一放到一个根目录,然后在服务器mklink.不明白的google。
然后在Global.asax中添加:
嗯,只是一个路由映射而已。
然后在配置文件中添加映射的配置:
如想对每个Request都执行Application_BeginRequest,那么必须要在system.web或system.webServer中的modules中加入
runAllManagedModulesForAllRequests="true"属性.
iis启动,访问http://localhost:8080/Bucket/Bucket/GetList,调用,一切OK。
但是用IIS当host的一个不好地方就是当我把方法改成了Post以后,再次调用,要么找不到这个url,要么405,具体原因不明。调试一晚上无果,求大神告知。
于是换成了Winform当Host,正式上线后用Windows Service当Host。
Chrome下输出:
Rest的好处在于轻巧和灵活,基于WebApi的规定。但是Rest只能用webHttpBinding绑定。