基于WCF的API实现
本文程序基于VS2013、EF6.1、WCF
WCF有2种方式,一是SOAP,一种是Restful
由于程序是基于PCL(可移植类库)的,所以不能用直接引入WCF服务的方式
网上的Restful方式的文章也有一些,但是都没有解决我的问题,最终还是在stackoverflow上找到了解决方法
言归正传,先看下代码结构(本人也是第一次用,结构可能不好,欢迎一起交流)
Client是用来测试的客户端,没什么,可以忽略
Contracts不用说就是契约了
Services是实现契约
Entity是EF实体框架
HostingService是用Windows service 做的宿主服务
一、Contracts
对契约的分类理解不深,所以大概写了一下,直接看详细代码
[ServiceContract]
public interface IBoardService
{
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "getConfigData/{email}", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
string GetConfigData(string email);
}
这里指明了是要POST请求,如果要Get,就把WebInvoke 换成WebGet
二、Services
public class BoardService : IBoardService
{
public string GetConfigData(string email)
{
return "successed";
}
}
这样写完你在调用的时候会提示 AddressFilter 和 EndpointDispatcher 不匹配,我搜到的也就到这了,这也是困扰了我好久的问题
最终在http://stackoverflow.com/questions/6919768/rest-wcf-service 找到了答案
在类上边加上 [ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]
然后果然变化了,错误变为 ContractFilter 和 EndpointDispatcher 不匹配,不用担心,到这就说明WCF部分OK了
三、HostingService
到这就是关键的App.config了,配置对了,就可以Post到了,具体如下
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding name="boardServiceBinding">
<security mode="None"/>
</binding>
</webHttpBinding>
</bindings> <protocolMapping>
<add scheme="webHttp" binding="webHttpBinding" />
</protocolMapping> <behaviors>
<serviceBehaviors>
<behavior name="BoardBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors> <endpointBehaviors>
<behavior name="REST">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors> <services>
<service behaviorConfiguration="BoardBehavior" name="BoardServices.Services.BoardService">
<endpoint address="" behaviorConfiguration="REST" binding="webHttpBinding"
contract="BoardContracts.ServiceContract.IBoardService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://127.0.0.1:8080/BoardService" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
请注意endpointBehaviors 和 endpoint的写法
到此Post服务就基本OK了
四、Entity
顺便说下Entity吧,在这里我用了Code First,至于3种First的区别,请Google 去吧,在此不做讨论
首先的问题是Entity我也熟悉,完全描述清楚表之间的关系不容易
于是发现VS2013有一个从数据库导入的Code First模式,SQL SERVER会用吧,那就先建表吧,然后导入就OK了
此处我想不用图片了吧,EF的导入真的很简单
代码等回家再上传吧,里边真的挺乱的,大家就找到自己需要的部分就好了
代码地址:http://pan.baidu.com/s/1bntlLoF
最新文章
- PYTHON 写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容。
- java web.xml配置详解
- BZOJ4518: [Sdoi2016]征途
- 我们可以用SharePoint做什么
- 【BZOJ】【3093】【FDU校赛2012】A Famous Game
- A Tour of Go Concurrency
- Linux MySQL-Workbench安装
- Day03 - Python 函数
- 类名.class与类名.this详解
- strtotime的几种用法区别
- [ACM] POJ 3252 Round Numbers (的范围内的二元0数大于或等于1数的数目,组合)
- zepto的使用方法
- [AOP系列]Autofac+Castle实现AOP事务
- Java 开发笔记2
- SpringMVC中的数据绑定(也就是参数的接收)
- java基础之集合框架--使用ArrayList类动态 存储数据
- ubuntu远程windows桌面
- 软件工程(FZU2015) 增补作业
- Django--ORM 多表查询
- HDU 2032 杨辉三角
热门文章
- iOS block简单传值
- UITextField的简单操作和实际应用
- java中的容器问题
- vb.net机房收费系统之组合查询
- 转载:Character data is represented incorrectly when the code page of the client computer differs from the code page of the database in SQL Server 2005
- 剑指Offer09 数值的整数次方
- sqlserver关于对列的权限控制
- Swiper之初识
- wamp图标黄色的另一种可能原因
- Cocos2d-JS事件处理机制