开放数据协议(OData)是3个询问和翻新数据的Web协议。OData是依据诸如HTTP和AtomPub的国际标准创造的,它提供了多个跨平台的多少通讯的方案。OData应用了web技能如HTTP、Atom宣布协议(AtomPub)和JSON等来提供对两样应用程序,服务和仓库储存的音信访问。SharePoint
20十, SQL Server 二零零六 福睿斯二, PowerPivot, Windows Azure Table Storage,
和第壹方的成品像 IBM’s WebSphere eXtreme
Scale
都使用OData。

首先,WCF Data
Services是WCF服务,所以你能够利用全数现存的WCF知识。其次,WCF Data
Services已经达成了OData拓扑,于是你能够从事于你的数码格式在您的顺序中的表示,而不是AtomPub/JSON这几个真正在互连网上传递的多寡格式。再有,WCF
Data
Services致力于数据传输,而不是数据存款和储蓄。你的数目能够存放在其余地方:本地的数据库,云端的数据库,外部的web
services,xml文件,等等。无论数额是怎么来的,你都得以用一样的秘技来公布/使用它们。

选用Visual Studio 20十里头使用WCF Data
Service,正是采取OData发表的Restful服务,上边包车型大巴例子演示2010里头的WCF
Data Service.

壹、创建四个数据库,使用SQL Server Management Studio并运维
本条剧本.

图片 1

创设了数据库,包蕴多少个表Categories和Products,八个表里头分别插入了二条记下。

二、创设3个Web Application,然后创立多个Entity Data Model,如下图所示

图片 2

3、成立一个Data Service暴光大家的模子:

using System;
using System.Collections.Generic;
using System.Data.Services;
using System.Data.Services.Common;
using System.Linq;
using System.ServiceModel.Web;
using System.Web;

namespace MyWebsite
{
    public class ProductService :
DataService<GettingStartedWithUpdateEntities>
    {
        // This method is called only once to initialize service-wide
policies.
        public static void InitializeService(DataServiceConfiguration
config)
        {
            // TODO: set rules to indicate which entity sets and service
operations are visible, updatable, etc.
            // Examples:
            config.SetEntitySetAccessRule(“*”,
EntitySetRights.AllRead);
            config.SetServiceOperationAccessRule(“*”,
ServiceOperationRights.All);
            config.DataServiceBehavior.MaxProtocolVersion =
DataServiceProtocolVersion.V2;
        }
    }
}

四、验证ProductService服务,在浏览器中查阅ProductService.svc,如下图所示:

图片 3

上海体育地方的始末正是AtomPub协议,首先,您向服务器的Atom链接发起带验证的GET请求(authenticated
GET),以获得有关当前可用服的叙述。服务器再次回到了二个(描述)Atom服务的XML文件,个中列出了某些列workspace,各类workspace包括相应的collection集合。叁个workspace恐怕是七个博客,wiki命名空间或内容集等通过你用户名/密码能够访问的能源。

各个workspace可含蓄伍体系型的集聚:条目(entries),体系(categories),模板(templates),用户(users)和集成能源(generic
resources)。

既然如此二个workspace是一个产品,那麽产品一般都饱含1多种的条目,产品等等那样的成团。全数那一个聚集都经过和HTTP谓词所指代的均等的方法(GET,POSTD,ELETE,PUT)处理和作出响应。全数那些(集合)扶助分页,由此,服务器能够将collections以一个便于处理的数量块方式赶回。同时还扶助按日期查询(集合),因而,您能够由此开首和终止日期过滤器来过滤collections。

为了博取二个collection,能够向网站(就是劳动文书档案collection的’ href
‘列出的地址)
发起一个GET请求。服务文书档案为种种collection都钦命了二个USportageI。要是你向一个U途乐I
发出GET请求,你会获取三个富含Atom
Collection的XML文件,当中列出了前X个该collection中的成员。如若collection中的成员多于X个,那么该公文还将含有指向下一堆成员的U宝马X3I,您能够选取它来获取下一堆成员。您也得以在HTTP的尾部通过Range来钦赐三日期范围,那样能够界定重临的collection只包罗这一个在初始和得了日期之间的条目。

 

 

咱俩早就有所了八个揭穿V二 版本的OData
Protocol的劳务ProductService.svc,上面小编创设多个WPF应用程序来开支那个服务。

伍、创设二个WPF应用程序,并加上Product瑟维斯.svc的服务引用。

图片 4

能够应用2个插件Open Data Protocol
Visualizer
查看服务再次回到的OData数据数据,那些工具的拿走和设置可以参考VS2010的扩展。能够由此服务引用的“View
in Diagram”进行查看。

图片 5 

下图是ProductService.svc的的OData Model Brower:

图片 6

陆、加多1个ViewModel,封装DataServiceContext,充当WPF表单和Data
Service交互的中介。

public class ViewModel
{
       private GettingStartedWithUpdateEntities _ctx;
       private Category[] _categories;
       private DataServiceCollection<Product> _products;

       public ViewModel()
       {
           _ctx = new GettingStartedWithUpdateEntities(
               new
Uri(“http://localhost:1812/ProductService.svc/%22));))
           Load();
       }

       public DataServiceCollection<Product> Products
       {
           get
           {
               return _products;
           }
       }

       public Category[] Categories
       {
           get
           {
               return _categories;
           }
       }

       public void SaveChanges()
       {
           _ctx.SaveChanges();
           Load();
       }

       public void Load()
       {
           _categories = _ctx.Categories.ToArray();
           _products = new
DataServiceCollection<Product>(_ctx);
           _products.Load(from p in _ctx.Products.Expand(“Category”)
                          select p);
       }
   }

7、制作WPF表单

<Window x:Class=”MyClientapp.MainWindow”
       
xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation%22
        xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml%22
        Title=”Products Catalog” Height=”400″ Width=”425″>
    <Grid>
        <StackPanel Orientation=”Horizontal”>
            <Grid Margin=”0,0,0,0″ Name=”grid1″ Width=”140″ >
                <ListBox ItemsSource=”{Binding Path=Products}”
                         Name=”Products”
                         IsSynchronizedWithCurrentItem=”True”>
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel
Orientation=”Horizontal”>
                                <TextBlock Text=”{Binding Path=Name}”
FontWeight=”Bold”/>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </Grid>
            <StackPanel Orientation=”Vertical” Width=”260″>
                <StackPanel Orientation=”Horizontal”>
                    <Label Name=”lblName” Width=”100″>
                        <TextBlock
Width=”150″>Name:</TextBlock>
                    </Label>
                    <TextBox Name=”txtName”
                             Text=”{Binding ElementName=Products,
Path=SelectedItem.Name, Mode=TwoWay}”
                             Width=”150″/>
                </StackPanel>
                <StackPanel Orientation=”Horizontal”>
                    <Label Name=”lblCost” Width=”100″>
                        <TextBlock Width=”150″
>Cost:</TextBlock>
                    </Label>
                    <TextBox Name=”txtCost”
                             Text=”{Binding ElementName=Products,
Path=SelectedItem.Cost, Mode=TwoWay}”
                             Width=”150″/>
                </StackPanel>
                <StackPanel Orientation=”Horizontal”>
                    <Label Name=”lblCategory” Width=”100″>
                        <TextBlock>Category:</TextBlock>
                    </Label>
                    <ComboBox   Name=”cmbCategory”
                                ItemsSource=”{Binding
Path=Categories}”
                                DisplayMemberPath=”Name”
                                SelectedValuePath=”.”
                                SelectedValue=”{Binding
ElementName=Products, Path=SelectedItem.Category, Mode=TwoWay}”
                                Width=”140″ />
                </StackPanel>
                <Button Height=”23″
                        HorizontalAlignment=”Right”
                        Name=”btnSaveChanges”
                        VerticalAlignment=”Bottom”
                        Width=”136″
                        Click=”btnSaveChanges_Click”>Save
Changes</Button>
            </StackPanel>
        </StackPanel>
    </Grid>
</Window>

编纂如下codebehind代码:

namespace MyClientapp
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        ViewModel viewmodel = new ViewModel();

        public MainWindow()
        {
            InitializeComponent();
            this.cmbCategory.DataContext = viewmodel;
            this.grid1.DataContext = viewmodel;
        }

        private void btnSaveChanges_Click(object sender,
RoutedEventArgs e)
        {
            viewmodel.SaveChanges();
            this.grid1.DataContext = viewmodel;
        }

    }
}

 

 

运作程序结果如下:

图片 7

 

正文代码下载:http://files.cnblogs.com/shanyou/MyWebsite.zip

 

参照财富:

相关文章

网站地图xml地图