ADO.NET DataService 默认是暴露EDM数据模型(e.g. Entity Framework) 以提供一种基于OData协议的数据服务,但也支持自定义的数据模型,可以选择别的数据源来实现一个DataService。当然作为自定义的数据模型,查询需要返回实现 IQueryable 接口的对象,更新则需要实现IUpdatable 接口。
先创建一个 WCF Service Application
删掉默认的 Service1.svc 和 IService.cs,添加一个 WcfDataService.svc 项目
查看 SVC 文件的 Markup,你会发现它加上
DataServiceHostFactory:
<%@ ServiceHost Language="C#"
Factory="System.Data.Services.DataServiceHostFactory, System.Data.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Service="WcfCustomerDataService.WcfDataService1"
%>
如果在开发非IIS Host应用的时候,则使用 WebServiceHost 来寄宿服务。详细参考:Hosting the Data Service (ADO.NET Data Services)
1.定义实体:实体里必须使用 DataServiceKeyAttribute 标注Key。否则DataService运行报错。
2. 定义数据模型:
(1) 在 DataModel 的静态构造方法中,添加了一些初始数据,在这里你可以任意扩展数据的来源。
(2) 定义了两个属性:Orders 和 Items, 它们返回 IQueryable<T> 的结果。
3. 实现Service运行,在浏览器里输入http://localhost:50480/WcfDataService1.svc/Orders就能看到结果:返回Atom协议的XML数据。
PS:Data Service 通过客户端Request的Accept
来决定返回格式。
比如我用 Fiddler 来查询,使用Accept: application/json 那么返回的就是Json格式的数据:
当然除了在 DataModel 中实现属性的方式提供数据查询服务以外,还可以在 Service 中实现方法提供服务。比如在上面的 WcfDataService1 里加入下面的方法:调用时按照OData协议写QueryData Service 对服务操作有一些具体的限制
-
此方法只能接受 [in] 参数。如果对参数进行定义,则每个参数的类型必须为基元类型。
-
此方法必须返回 void、IEnumerable<T>、IQueryable<T>、T 或基元类 (如整数或字符串)。T 必须为一个类,此类表示数据服务将公开的数据模型中的某个实体类型。若要支持查询选项(如排序、分页和筛选),服务操作方法应返回 IQueryable<T>。
-
必须用 [WebGet] 或 [WebInvoke] 属性为此方法添加标注。[WebGet] 使调用方能够通过使用 GET 请求调用此方法;[WebInvoke] 使调用方能够通过使用 PUT、POST 或 DELETE 请求调用此方法。
-
可以用 SingleResultAttribute 为服务操作添加批注,指定此方法的返回值是一个实体而不是一个实体集。这一区别确定了生成的响应序列化。例如,当使用 AtomPub 序列化时,单个资源类型实例将表示为一个 entry 元素,而单个实例集将表示为一个 feed 元素。
4. 客户端调用
创建一个Console工程,添加Service Reference 生成客户端代理,调用DataService:
参考:http://msdn.microsoft.com/zh-cn/library/dd723653.aspx
(2011/7/30 更新)
通过 QueryInterceptorAttribute 和 ChangeInterceptorAttribute 可以对请求进行拦截。
参考:http://msdn.microsoft.com/zh-cn/library/dd744837.aspx
分享到:
相关推荐
HYPERLINK"http://blog.csdn.net/fangxinggood/article/details/6762632"WCF实例——WindowsServiceHost开发,调试,制作安装包本篇实例介绍如何使用WindowsService来寄宿WCF服务:1.添加WCFServiceLibrary工程,这...
wcf经典实例wcf经典实例wcf经典实例wcf经典实例wcf经典实例wcf经典实例wcf经典实例wcf经典实例wcf经典实例wcf经典实例wcf经典实例wcf经典实例wcf经典实例wcf经典实例wcf经典实例
WCF实例WCF实例WCF实例WCF实例WCF实例WCF实例WCF实例WCF实例WCF实例WCF实例WCF实例WCF实例WCF实例WCF实例WCF实例WCF实例WCF实例WCF实例WCF实例WCF实例WCF实例WCF实例WCF实例WCF实例WCF实例WCF实例
WCF实例管理的概述,WCF服务实例激活类型三种方式概述和单例服务的完整代码。
wcf实例化-单调服务模式,言简意赅,很容易理解。就是现在积分没发控制,不然1分即可。很简单的代码
wcf 实例 代码 简单实例,方面上手 简单实例,方面上手
一个以订票为例简单应用WCF实例,入门简单,经典
一个简单的WCF实例,但结构师分为Host,Service,client,将Host与Service分开实现,实例中有相关的配置
WCF 自定义编码绑定
WCF 22个实例1 wcf 收藏,好东西
在博客园看到的WCF的例子,做成的源码。 先运行Host,再运行Client就能看到效果。
WCF 元数据浏览器 WCF 元数据浏览器
ajax跨域调用wcf实例
1:创建第一个WCF服务 2: 使用IIS发布WCF服务 3:自运行WCF服务 4:使用Windows服务发布WCF服务 5:创建WCF客户端程序
WCF实例(基于X.509证书的身份验证)
WCF小实例[包括WCF事务编程]
WCF 是微软力推的通讯框架,它能够以 ASP.NET WebService 的方式实现 RESTful 方式的服务。但是缺陷是目前的版本不支持对 HTTP multipart 格式的自动解析。而不像传统的 ASP.NET WebService 可以自动解析 multipart ...
帮助入门的同志,希望这个东西能给您的入门带来方便,大家共同进步。
Windows Communication Foundation (WCF)是 Microsoft为构建面向服务的应用提供的分布式通信编程框架,是.NET Framework 3.5的重要组成部分
本实例是一个关于配置WCF、编写WCF服务到调用的,里面会教你手动生成对应的WSDL。此实例基本借鉴 Robin关于WCF第七节中的思想。