本文程序基于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

最新文章

  1. PYTHON 写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容。
  2. java web.xml配置详解
  3. BZOJ4518: [Sdoi2016]征途
  4. 我们可以用SharePoint做什么
  5. 【BZOJ】【3093】【FDU校赛2012】A Famous Game
  6. A Tour of Go Concurrency
  7. Linux MySQL-Workbench安装
  8. Day03 - Python 函数
  9. 类名.class与类名.this详解
  10. strtotime的几种用法区别
  11. [ACM] POJ 3252 Round Numbers (的范围内的二元0数大于或等于1数的数目,组合)
  12. zepto的使用方法
  13. [AOP系列]Autofac+Castle实现AOP事务
  14. Java 开发笔记2
  15. SpringMVC中的数据绑定(也就是参数的接收)
  16. java基础之集合框架--使用ArrayList类动态 存储数据
  17. ubuntu远程windows桌面
  18. 软件工程(FZU2015) 增补作业
  19. Django--ORM 多表查询
  20. HDU 2032 杨辉三角

热门文章

  1. iOS block简单传值
  2. UITextField的简单操作和实际应用
  3. java中的容器问题
  4. vb.net机房收费系统之组合查询
  5. 转载: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
  6. 剑指Offer09 数值的整数次方
  7. sqlserver关于对列的权限控制
  8. Swiper之初识
  9. wamp图标黄色的另一种可能原因
  10. Cocos2d-JS事件处理机制