重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
第十一篇:REST调用
创新互联科技有限公司专业互联网基础服务商,为您提供内江服务器托管,高防物理服务器租用,成都IDC机房托管,成都主机托管等互联网服务。上篇写的是Ajax调用WCF,今天写一篇如何以REST方式调用WCF服务。不知道REST是什么的同学,可以去google一下。对某些类型的应用,REST还是相当不错的方式,所以专门写一篇来说明一下开发方法。
老规矩,上代码,直接在代码注释里讲解。
1、服务端:
服务契约,我们定义CRUD4个方法(增查改删),对应HTTP METHOD分别为PUT/GET/POST/DELETE:
- using
- using
- using//这个命名空间要求引入System.ServiceModel.Web.dll
- namespace
- "WCF.Demo"
- publicinterface
- //WebInvoke中标明REST的相关属性,以这个方法为例,调用的Url是 ..../Data/key/data,HTTP方法是PUT,响应为Json格式(也可以换成xml)
- //这样如果客户端用PUT方法访问 ..../Data/1/100,就会映射到CreateData方法上来,并且传入key=1,data=100
- "Data/{key}/{data}""PUT"
- voidstringstring
- "Data/{key}""GET"
- stringstring
- "Data/{key}/{data}""POST"
- voidstringstring
- "Data/{key}""DELETE"
- voidstring
然后是实现类,这个简单,没什么可说的。
- using
- using
- using
- namespace
- //这个例子中用了Single Instance模式,这样m_DataDict的值才能保留住
- publicclass
- privatestringstringnewstringstring
- publicvoidstringstring
- publicstringstring
- return"NOT FOUND"
- publicvoidstringstring
- publicvoidstring
配置文件最关键了,注意里面绿色的注释部分:
最后发布服务,没什么特殊的,和以前一样:
- using
- using
- namespace
- class
- staticvoidstring
- usingnewtypeof
- "Running ..."
这个服务端没有用IIS做HOST,直接用自己的进程做的宿主(当然了,本质还是http.sys在工作)。
2、客户端
我们这回要用REST形式访问服务端,所以不是普通意义上的WCF客户端了,再也用不着那么麻烦的写配置文件创建Channel或者代理了。
- using
- using
- namespace
- class
- staticvoidstring
- //用一个WebClient就可以搞定了
- new
- //以PUT方式访问Data/1/100,会映射到服务端的CreateData("1", "100")
- "http://localhost:8080/wcf/Data/1/100""PUT"string
- //以GET方式访问Data/1,会映射到服务端的RetrieveData("1"),应该返回"100"
- "http://localhost:8080/wcf/Data/1"
- //以POST方式访问Data/1/200,会映射到服务端的UpdateData("1", "200")
- "http://localhost:8080/wcf/Data/1/200""POST"string
- //再GET一次,应该返回"200"
- "http://localhost:8080/wcf/Data/1"
- //以DELETE方式访问Data/1,会映射到服务端的DeleteData("1")
- "http://localhost:8080/wcf/Data/1""DELETE"string
- //再GET一次,应该返回"NOT FOUND"
- "http://localhost:8080/wcf/Data/1"
OK,运行一下客户端,返回如下,和预期一致:
需要补充一下,如果用IIS做HOST,比如DataService.svc.cs是实现类,一定要在DataService.svc中加上Factory,如下:
- <%@ ServiceHost Language="C#""true""WebServer.DataService""DataService.svc.cs""System.ServiceModel.Activation.WebServiceHostFactory"
表明不是使用默认的ServiceHostFactory,而是适应WEB HTTP开发的WebServiceHostFactory。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。