`
tubaluer
  • 浏览: 1500185 次
文章分类
社区版块
存档分类
最新评论
  • sblig: c / c++ 是不一样的都会输出 100
    j = j++

WCF实例 —— 自定义DataService数据模型(1)

 
阅读更多
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协议写Query
Data 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


分享到:
评论

相关推荐

    WCF实例 —— Windows Service Host 开发,调试,制作安装包.doc

    总结一下,本实例详细介绍了如何使用Windows Service Host开发WCF服务,包括创建服务库、服务宿主项目,添加安装程序,以及调试服务的方法。通过这些步骤,你可以构建出一个完整的、能够在Windows系统中运行的WCF...

    WCF实例教程解析

    总的来说,这个WCF实例教程提供了一个基础的车票预订服务模型,涵盖了服务契约、数据契约、服务实现和宿主的基本概念。对于初学者来说,这是一个很好的起点,可以帮助理解WCF的工作原理及其在实际应用中的使用。通过...

    简单WCF实例WCF初体验

    3. **合同**:合同定义了服务提供的操作和服务的行为,分为数据合同(Data Contract)、服务合同(Service Contract)和消息合同(Message Contract)。 4. **绑定**:绑定是客户端和服务之间通信的规范,包括传输...

    WCF实例(入门简单,经典)

    8. **调试与测试**:通过WCF测试客户端或者自定义测试代码,对服务进行调试和验证。 **三、WCF教程资源** 压缩包中的“WCF实例.pdf”很可能是详尽的教程文档,涵盖了WCF的基本概念、配置、部署以及通过实例演示...

    我的第一个完整的WCF实例

    通过这个实例,学习者可以深入理解WCF如何处理数据交换、安全、事务、并发控制等核心概念,并为更复杂的WCF应用打下坚实的基础。同时,了解如何在VS2010环境中调试和测试WCF服务,也是提升开发效率的关键技能。

    《WCF按部就班学习系列4_WCF实例管理概述》

    WCF实例管理的概述,WCF服务实例激活类型三种方式概述和单例服务的完整代码。

    WCF实例化服务-单调服务

    在.NET框架中,Windows Communication Foundation(WCF)是一种用于构建分布式应用程序的服务模型。它提供了丰富的功能,包括安全性、事务处理、可靠消息传递等。在WCF中,服务实例化是控制服务对象创建的关键部分,...

    wcfdataservice

    10. **扩展性**:WCF Data Service允许自定义行为和功能,比如通过继承`DataService&lt;T&gt;`类来自定义服务行为,或者实现`IDataServiceMetadataProvider`和`IDataServiceQueryProvider`接口来自定义元数据和查询行为。...

    wcf 实例(代码)

    1. **服务**: WCF中的服务是对外提供功能的逻辑单元,它可以是任何类型的操作集合。服务通过终结点与外界交互。 2. **终结点**: 终结点是服务与客户端进行通信的入口点,包括地址、绑定和合同。地址定义了服务在...

    WCF自定义服务示例源码

    Windows Communication Foundation(WCF)是.NET Framework中用于构建分布式应用程序的服务模型。它提供了一种统一的方式,通过网络进行应用程序之间的通信,支持多种协议,如HTTP、TCP、命名管道等。在提供的源码中...

    WCF入门详解————

    1. **统一的接口**:WCF可以为不同的客户端提供一致的访问接口,无论是Web服务还是其他类型的应用程序。 2. **跨平台支持**:WCF支持跨平台通信,这意味着即使合作伙伴使用的是非Windows环境,也可以顺利进行交互。 ...

    WCF实例教程

    【WCF实例教程详解】 Windows Communication Foundation (WCF) 是微软.NET Framework中用于构建分布式应用程序的一种框架,它提供了一种统一的方式来进行服务的创建、部署和管理。本教程将逐步介绍如何创建和发布...

    6月22日PM WCF服务-分布式事务、自定义对象传递、基础使用示例.rar

    为了使自定义类型能够在WCF服务之间传递,它们必须实现ISerializable接口或使用数据契约(DataContract)和数据成员(DataMember)特性进行标记。这样,WCF可以将对象转换为消息格式并在网络上发送,然后在接收端反序列...

    ASP.NET 4.0 WCF实例

    ASP.NET 4.0 WCF实例是一个深入理解Windows Communication Foundation(WCF)技术的重要实践案例。WCF是微软提供的一种全面的服务导向架构,用于构建高度互操作的、分布式的、面向服务的应用程序。在这个实例中,...

    WCF实例(配置、编写、注意事项)

    WCF(Windows Communication Foundation)是微软.NET框架中的一种高级通信技术,用于构建分布式应用程序,它提供了灵活的服务模型,支持多种传输协议、数据编码和安全机制。本实例将深入探讨WCF的配置、编写过程以及...

    WCF 元数据浏览器 WCF 元数据浏览器

    元数据包含了服务契约(Service Contract)、数据契约(Data Contract)、绑定(Binding)和地址(Endpoint)等关键信息。这些信息使得服务消费者能够了解如何与服务进行交互,例如,客户端如何构造请求消息、服务的...

    WCF实例,分为Host,Service,Client

    一个简单的WCF实例,但结构师分为Host,Service,client,将Host与Service分开实现,实例中有相关的配置

    WCF实例开发

    在标题“WCF实例开发”中提到的问题“WCF返回table必须赋值tablename”,指的是在使用WCF服务向客户端传递数据库表格数据时,需要确保表格具有一个明确的名称(tablename)。这是因为当数据以DataTable对象的形式被...

    WCF实例及文档

    4. **行为**:WCF的行为可以控制服务的行为,如服务元数据暴露(允许其他应用发现服务)、实例化策略(单例、多例等)和服务认证等。 5. **配置文件**:在.NET应用程序中,WCF服务的配置通常存储在app.config或web....

    WCF新手实例

    **Windows Communication Foundation (WCF) 是微软.NET框架中的一项重要技术,用于构建分布式应用程序,它提供了统一的编程模型,能够创建各种服务并实现跨平台通信。对于初学者来说,掌握WCF的基本概念和实践是非常...

Global site tag (gtag.js) - Google Analytics