基于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
基于WCF的API实现的更多相关文章
- 基于.NET Socket API 通信的综合应用
闲谈一下,最近和客户进行对接Scoket 本地的程序作为请求方以及接受方,对接Scoket 的难度实在比较大,因为涉及到响应方返回的报文的不一致性,对于返回的报文的格式我需要做反序列化的难度增大了不少 ...
- 基于 ArcGIS Silverlight API开发的WebGIS应用程序的部署
部署流程概述 在微软的iis服务器上部署基于ArcGIS Silverlight API的应用程序,主要包括以下几个步骤: 1)(可选)部署GIS服务 如果需要将GIS服务也部署在Web服务器上,则 ...
- Resumable.js – 基于 HTML5 File API 的文件上传
Resumable.js 是一个 JavaScript 库,通过 HTML5 文件 API 提供,稳定和可恢复的批量上传功能.在上传大文件的时候通过每个文件分割成小块,每块在上传失败的时候,上传会不断 ...
- 用C#基于WCF创建TCP的Service供Client端调用
本文将详细讲解用C#基于WCF创建TCP的Service供Client端调用的详细过程 1):首先创建一个Windows Service的工程 2):生成的代码工程结构如下所示 3):我们将Servi ...
- 基于ArcGIS JS API的在线专题地图实现
0 引言 专题地图是突出而深入的表示一种或几种要素或现象,即按照地图主题的要求,集中表示与主题有关内容的地图.专题地图的专题要素多种多样,分类方法也多种多样,根据专题地图表现数据的特点可分为定 ...
- atitit.基于http json api 接口设计 最佳实践 总结o7
atitit.基于http json api 接口设计 最佳实践 总结o7 1. 需求:::服务器and android 端接口通讯 2 2. 接口开发的要点 2 2.1. 普通参数 meth,p ...
- 基于百度地图api + AngularJS 的入门地图
转载请注明地址:http://www.cnblogs.com/enzozo/p/4368081.html 简介: 此入门地图为简易的“广州大学城”公交寻路地图,采用很少量的AngularJS进行inp ...
- PHP:基于百度大脑api实现OCR文字识别
有个项目要用到文字识别,网上找了很多资料,效果不是很好,偶然的机会,接触到百度大脑.百度大脑提供了很多解决方案,其中一个就是文字识别,百度提供了三种文字识别,分别是银行卡识别.身份证识别和通用文字识别 ...
- js基于谷歌地图API绘制可编辑圆形与多边形
之前的工作中需要在谷歌地图上绘制可编辑多边形区域,所以基于谷歌地图API封装了个html页面,通过调用js绘制多边形并返回各点的经纬度坐标:当然首先你要保证你的电脑可以打开谷歌地图... 新建一个ht ...
随机推荐
- 【Android 界面效果43】Android LayoutInflater的inflate方法中attachToRoot的作用
我们在ListView的Adapter的getView方法里面经常会调用两个参数的inflate方法, mInflater.inflate(R.layout.adv_viewpager, null); ...
- android系统启动时自动运行自己的程序
android系统在Manifest.permission中有这样一条RECEIVE_BOOT_COMPLETED的定义,当你自己的程序加 入这个权限后,就可以在系统启动完毕后收到一条系统的广播,这个 ...
- UICollectionView 简单应用和实际操作
1.网格视图 UICollectionView 网格布局 UICollectionViewFlowLayout系统图自带网格布局 系统自带的网格布局 UICollectionViewFl ...
- PSI在windows server2008服务器上的安装方法
PSI(http://www.oschina.net/p/psi-crm)是一款开源进销存软件,功能较为齐全,使用比较方便.在windows server2008系统中安装时遇到了一些问题,总结解决方 ...
- xe5 android sample 中的 SimpleList 是怎样绑定的
C:\Users\Public\Documents\RAD Studio\12.0\Samples\FireMonkeyMobile 例子中的绑定方式如下图: 1.拖拽一个listview到界面上,然 ...
- JavaScript:exec()方法的用法及说明
最近在看某知名js框架的源码,突然间发现自己对exec()方法竟然不太理解,然后就仔细的分析了一下这个方法 下面贴个exec()方法使用的代码出来 rquickExpr = /^(?:\s*(< ...
- java实现Composite(组合)模式
组合模式涉及的是一组对象,其中一些对象可能含有其他对象,这些对象也可以含有对象,因此,有些对象代表的是对象群组. Composite模式的设计意图在于:让所有的用户能够用统一的接口处理单个对象以及对象 ...
- css3简易实现图标动画由小到大逐个显现
在制作网站时避免图片太平淡经常会用到动画效果:由小到大跳跃出现.这种效果很有视觉冲击力,显著提高关注度~ 原理:利用css3的动画属性@keyframes@-moz-keyframes@-webkit ...
- VpnService
这段时间项目中使用到了VpnService,整理了一下官方文档的资料 VpnService is a base class for applications to extend and build t ...
- 收藏的js学习小例子
1.js模拟java里的Map function Map(){ var obj = {} ; this.put = function(key , value){ obj[key] = value ; ...