http://martinwilley.com/net/data/wcfds.html

WCF Data Services

For .net 4.5, this is replaced by Microsoft.AspNet.Odata which uses ODataController (based on WebApi ApiController).

About

Formerly "Astoria" and "ADO.Net Data Services", this is the .Net ODATA implementation - ODATA being RESTful HTTP/JSON/ATOM xml access to databases.

OData

HTTP verbs: GET is get, POST is insert, PUT is update, MERGE is partial update, DELETE is delete

NB: PUT,MERGE and DELETE may be blocked by proxies/firewalls, so add the X-HTTP-Method header can be added to a POST request

  • Use http://localhost/wcfds.svc/$metadata to get metadata (like ?wsdl)
  • http://localhost/wcfds.svc/customers('ALFKI')
    get by primary key
  • http://localhost/wcfds.svc/customers/$count
  • http://localhost/wcfds.svc/customers?$orderby=Price desc
  • http://localhost/wcfds.svc/customers?$skip=20&$top=5
  • http://localhost/wcfds.svc/customers?$filter= Name eq 'Bill' and Price gt 10
  • http://localhost/wcfds.svc/customers?$filter= startswith(name, 'B') and year(Date) gt 2011 and round(Price) = 5
  • http://localhost/wcfds.svc/customers?$expand=Orders/Order_Details
    Eager loading

Server code

Reference System.Data.Services.Client.dll. The VS2010 item template for the endpoint is "WCF Data Service". The svc code behind is a DataService<T> with a static InitializeService() method which should expose a IQueryable<T> getter.

DataService<T> can be an Entity Framework ObjectContext, which exposes the ObjectSets (tables).

For custom classes that are exposed, add a [DataServiceKeyAttribute(pk)] to the class to denote the primary key (for http://localhost/wcfds.svc/custom('ALFKI') gets). For POCOs, add [DataContract(IsReference=true)] so properties are serialized as objects, not values (i.e. product.Category refers to a Category object).

Security

You can secure with the standard IIS/web.config settings including Windows, asp.net forms etc.

In the client library, you can set context.Credentials = new NetworkCredential(username, password) or use the context.SendingRequest event to set request headers such as Authorization.

In server InitializeService, configure SetEntitySetAccessRules

Service Operations

In InitializeService, config.SetServiceOperationAccessRule("*", ServiceOperationRights.All); as applicable/

Expose sprocs as service operations: [WebGet]/[WebInvoke] methods- input parameters must be primitives, return must be primitive or IEnumerables/IQueryable.

Client

Adding a service reference to an ODATA service creates a proxy derived from DataServiceContext which looks like a normal EF ObjectContext. (MSDN concepts)

  • context.SaveChanges(SaveChangesOption.Batch) will batch changes (also: ContinueOnError, ReplaceOnUpdate)
    Catch DataServiceQueryException, DataServiceRequestException
  • It uses ATOM - to use JSON, use a WebClient with client.Headers["Accept"] = "application/json"
  • In a partial class, add [QueryInterceptor("Customers")]public Expression... OnQueryCustomers()
  • [ChangeInterceptor("Customers")] can also be used for validation (or subscribe to regular EntityChanging event)

For data-binding, wrap the objectsets in DataServiceCollection which extends ObservableCollection.

Queries

    • The entity collections (ObjectSets in EF) are DataServiceQuery<T> but otherwise it's mostly normal IQueryable
    • Eager load (ODATA $expand) with context.Orders.Expand("Order_Details")
    • Explicit load (lazy load) with context.LoadProperty(order, "Order_Details")
    • Explicitly executing the query returns a QueryOperationResponse.
      When paging, this has a GetContinuation property which includes the url of the next page
      NB: you must iterate the query result to use the continuation

[转]WCF Data Services OData的更多相关文章

  1. 为 Oracle Database 开发 WCF Data Services 和 OData 应用程序

    为 Oracle Database 开发 WCF Data Services 和 OData 应用程序 本教程包含以下部分:   目的   所需时间   概述   先决条件   创建新的网站项目   ...

  2. WCF Data Services 5.0 for OData V3

    https://www.microsoft.com/en-us/download/details.aspx?id=29306 VS 2010 下 安装 WCF Data Services 5.0 en ...

  3. [转]Consuming a OData Service in a Client Application (WCF Data Services)

    本文转自:https://msdn.microsoft.com/zh-tw/library/dd728282(v=vs.103).aspx WCF Data Services 5.0   其他版本   ...

  4. [转]访问 OData 服务 (WCF Data Services)

    本文转自:http://msdn.microsoft.com/zh-SG/library/dd728283(v=vs.103) WCF 数据服务 支持开放式数据协议 (OData) 将数据作为包含可通 ...

  5. 精进不休 .NET 4.5 (12) - ADO.NET Entity Framework 6.0 新特性, WCF Data Services 5.6 新特性

    [索引页][源码下载] 精进不休 .NET 4.5 (12) - ADO.NET Entity Framework 6.0 新特性, WCF Data Services 5.6 新特性 作者:weba ...

  6. 【2016-10-26】【坚持学习】【Day13】【WCF】【EF + Data Services】

    今天做了一个demo, EF+Data Services 先建立一个网站项目 添加一个ADO.NET 数据模型 相当于一个EF容器,用来连接MSSQL数据库 添加一个WCF Data Services ...

  7. WCF Data Service 使用小结 (一)—— 了解OData协议

    最近做了一个小项目,其中用到了 WCF Data Service,之前是叫 ADO.NET Data Service 的.关于WCF Data Service,博客园里的介绍并不多,但它确实是个很好的 ...

  8. WCF Data Service 使用小结 —— 了解OData(一)

    最近做了一个小项目,其中用到了 WCF Data Service,之前是叫 ADO.NET Data Service 的.关于WCF Data Service,博客园里的介绍并不多,但它确实是个很好的 ...

  9. WCF Data Service 使用小结(二) —— 使用WCF Data Service 创建OData服务

    在 上一章 中,介绍了如何通过 OData 协议来访问 OData 服务提供的资源.下面来介绍如何创建一个 OData 服务.在这篇文章中,主要说明在.NET的环境下,如何使用 WCF Data Se ...

随机推荐

  1. 简单实现高并发处理秒杀思路(redis分布式锁)

    利用redis的单线程特性 setnx       (SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值. getset 自动将key对应到value并且返 ...

  2. 【monkeyrunner】monkeyrunner 的的方法介绍

    1.用法:MonkeyRunner.alert(message,title,okTitle) 执行当前脚本弹出一个警示对话框,用户关闭对话框后脚本才结束. message:会话弹出的内容title:会 ...

  3. 02 - Unit011:Spring AOP

    Spring AOP 面向切面(儿)编程(横切编程) Spring 核心功能之一 Spring 利用AspectJ 实现. 底层是利用 反射的动态代理机制实现的 其好处: 在不改变原有功能情况下, 为 ...

  4. Java反射机制的适用场景及其利与弊 ***

    一.反射的适用场景是什么? 1).Java的反射机制在做基础框架的时候非常有用,有一句话这么说来着:反射机制是很多Java框架的基石.而一般应用层面很少用,不过这种东西,现在很多开源框架基本都已经给你 ...

  5. CentOS下长时间ping网络加时间戳并记录到文本

    Linux下长时间ping网络加时间戳并记录到文本   由于一些原因,比如需要检查网络之间是否存在掉包等问题,会长时间去ping一个地址,由于会输出大量的信息而且最好要有时间戳,因此我们可以使用简单的 ...

  6. 20181124_webAPI基础01_创建一个基础的WebAPI项目

    1. webApi属于RESTful架构风格, 而RESTful风格, 是以资源为视角来描述服务的 2. 创建webAPI项目 3. 选择webAPI, 然后mvc会自动引用 4. 点击确定, 就创建 ...

  7. 6_python之路之atm购物

    6_python之路之atm购物 1.程序说明:Readme.cmd supermarket 项目主目录 ├── access.log 日志文件 ├── atm atm程序 │?? ├── atm.p ...

  8. IOS 文件解析

    import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java ...

  9. Win7+Ubuntu12.04(EasyBCD硬盘安装)

    安装双系统 Windows7 + Ubuntu12.04 软件准备 准备两个东西EasyBCD软件和iso镜像(我用的easybcd是2.2版,就下载1.7之后版就行,要那种安装版的,不要绿色版) E ...

  10. Unity Editor(一)OnInspectorGUI的重写与面板的创建

    http://blog.csdn.net/husheng0/article/details/52568027