WCF Data Service QuickStart

盛开数据协议(OData)是壹个查询和翻新数据的Web协议。OData是依照诸如HTTP和AtomPub的国际标准创设的,它提供了2个跨平台的数量通讯的方案。OData应用了web技术如HTTP、Atom发表协议(AtomPub)和JSON等来提供对不一样应用程序,服务和存储的新闻访问。SharePoint
2008, SQL Server 2010 CR-V2, 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 2009里头使用WCF Data
Service,就是行使OData公布的Restful服务,上面的事例演示二〇〇九里头的WCF
Data Service.

一 、创造2个数据库,使用SQL Server Management Studio并运营
以此剧本.

图片 1

始建了数据库,蕴含七个表Categories和Products,多个表里头分别插入了2条记下。

贰 、创立多个Web Application,然后创造五个Entity Data Model,如下图所示

图片 2

三 、创造三个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集合。2个workspace或者是一个博客,wiki命名空间或内容集等通过你用户名/密码可以访问的财富。

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

既然如此二个workspace是3个产品,那麽产品一般都带有一层层的条规,产品等等那样的汇集。全部那么些聚集都通过和HTTP谓词所指代的一样的章程(GET,POSTD,ELETE,PUT)处理和作出响应。全部那些(集合)帮助分页,由此,服务器可以将collections以一个便于处理的数目块方式赶回。同时还帮衬按日期查询(集合),因而,您可以经过初阶和终结日期过滤器来过滤collections。

为了拿走2个collection,可以向网址(就是劳动文档collection的’ href
‘列出的地方)
发起一个GET请求。服务文档为各类collection都指定了1个U汉兰达I。尽管您向二个USportageI
发出GET请求,你会取得1个包蕴Atom
Collection的XML文件,其中列出了前X个该collection中的成员。即便collection中的成员多于X个,那么该公文还将涵盖指向下一批成员的U锐界I,您可以运用它来得到下一批成员。您也足以在HTTP的头顶通过Range来指定十二日期范围,这样可以界定再次回到的collection只含有那么些在开首和了结日期之间的条条框框。

 

 

小编们早已怀有了三个暴光V2 本子的OData
Protocol的劳动ProductService.svc,上面小编成立二个WPF应用程序来消费那么些服务。

五 、创设三个WPF应用程序,并充分ProductService.svc的劳动引用。

图片 4

可以采用贰个插件Open Data Protocol
Visualizer
翻开服务再次来到的OData数据数据,这几个工具的获取和安装可以参照VS2010的扩展。可以透过劳动引用的“View
in Diagram”进行查看。

图片 5 

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

图片 6

六 、添加一个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

 

参照财富:

相关文章