基于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小项目之四 自动更新检查的逻辑
------- 源自梦想.永远是你IT事业的好友.只是勇敢地说出我学到! ---------- 按惯例,写在前面的:可能在学习Android的过程中,大家会和我一样,学习过大量的基础知识,很多的知识点 ...
- iOS webView的一些基本用法
1.自己拼接html来显示想要的文字(参考:http://www.mamicode.com/info-detail-492242.html) NSString *htmlStr=@"< ...
- Myeclipse集成Jboss 6.1控制台不输出日志信息
在使用myeclipse+jboss 6.1开发的时候发现jboss能够正常启动但是myeclipse的控制台却没有任何的信息输出,这使得我没有办法开发,在查找了大部分的资料发现很多说要改什么jbos ...
- angularJs中图表功能(有集成框架)-angular-flot
1.柱状图和折线图的数据格式: $scope.Chart.data = [ { label: "离线", data: [[0, 2]] }, { label: "在线&q ...
- Python练习册--PIL处理图片之加水印
背景 最近在看到了Python 练习册,每天一个小程序 这个项目,非常有趣,也比较实用. 晚上看了这第000题,关于Python图片处理: 将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似 ...
- CSS3--实现特殊阴影 (实例)
学习来源:慕课网http://www.imooc.com/view/240 先看效果图↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ HTML结构 <body> <div class=& ...
- Js基础知识-入门
创建脚本块 <script language=”JavaScript”> JavaScript code goes here </script> 隐藏脚本代码 <scri ...
- Game start
今天开始有计划的码代码吧!!我可是以后要进微软或者google的男人.初步计划先学习编程之美吧,每天码一到题的解法,每天每天每天..然后是ACM竞赛基础,每天一节同上.最后..不对,冷静冷静,我已经没 ...
- xenserver 清理日志的方法
转载:http://vps.gl/vps/259.html XENSERVER服务器经过半年或者一年使用后,XenServer产生了很多日志文件.XenServer默认是4G系统空间,而这些日志文件会 ...
- vpn连接成功后,本地无法连接外网
把在远程网络上使用默认网关前面的对勾取消掉,确定就ok啦...