zoukankan      html  css  js  c++  java
  • OData 11 入门:实现一个简单的OData服务

    1.什么是OData:开放数据协议(OData)是一个查询和更新数据的Web协议。OData应用了web技术如HTTP、Atom发布协议(AtomPub)和JSON等来提供对不同应用程序,服务和存储的信息访问

    2.OData 优势(个人看法)

      1)一种通用的跨语言的协议,

      2)基于.net的实现可以非常方便的实现一些功能(例如在客户端使用lambda表达式, 使用odata 传递请求到server,最后服务器返回一个结果集 , 注意 过滤排序什么操作是在服务器实现的,我个人觉得这个功能封装的很彻底,实现也很酷)

    以下代码就是一个最简单的OData的实现

    代码
    [DataServiceKey("Id")] //主键
    public class UserInformation
    {
    public int Id { get; set; }
    public string UserName { get; set; }
    public int Age { get; set; }
    }
    public partial class DataContext
    {
    public IQueryable<UserInformation> UserInformations
    {
    get
    {
    List
    <UserInformation> users = new List<UserInformation>()
    {
    new UserInformation (){Id=1,UserName="Test 1", Age=30},
    new UserInformation (){Id=2,UserName="Test 2", Age=30},
    new UserInformation (){Id=3,UserName="Test 3", Age=20},
    };
    return users.AsQueryable<UserInformation>();
    }
    }
    }
    public class WcfDataService2 : DataService<DataContext>
    {
    public static void InitializeService(IDataServiceConfiguration
    config)
    {
    config.SetEntitySetAccessRule(
    "*", EntitySetRights.All);//定义访问权限
    }
    }

    如果需要对多个不同对象实现OData 只要对DataContext添加不同的属性就好了

    这样的代码在客户端操作起来,和使用EF没什么差别(内部却是使用OData实现)

    运行的时候直接访问服务,显示如下

    服务器主要是告诉客户端他实现了哪些东西

    代码
    <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
    <service xml:base="http://localhost:12002/WcfDataService2.svc/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app" xmlns="http://www.w3.org/2007/app">
    <workspace>
    <atom:title>Default</atom:title>
    <collection href="UserInformations">
    <atom:title>UserInformations</atom:title>
    </collection>
    </workspace>
    </service>

    以下是客户端使用的范例

    1.引用web服务 - -#

    2. 编写如下代码~~

    代码
    DataContext serverContext = new DataContext(new Uri("http://localhost:12002/WcfDataService2.svc/"));
    var users
    = serverContext.UserInformations.Where(p => p.Id > 0).OrderBy(p => p.Age).Skip(1).Take(2);
    foreach (var user in users)
    {
    Console.WriteLine(
    "{0} - {1} {2}", user.Id, user.UserName, user.Age);
    }

    代码是非常的精简,而且非常方便的在客户端使用高性能而且方便的lambda表达式

    如果你设计服务器程序 ,那么odata是一个很好的选择

  • 相关阅读:
    XLS导出的服务器端配置方式
    SQLSERVER2008 内存占用高的处理方式
    word定义多级列表
    SQL Server替换特殊字符
    php和mysql两种不同方式的分割字符串和类型转换
    tp杂记
    MySql数据库 主从复制/共享 报错
    the server ssl certificate failed to verify
    loaded some nib but the view outlet was not set(转载)
    xcode7 调用相册权限无提示
  • 原文地址:https://www.cnblogs.com/PurpleTide/p/1911434.html
Copyright © 2011-2022 走看看