Создание клиентского приложения .NET Framework (краткое руководство по службам WCF Data Services)

Это последняя задача краткого руководства по службам Службы WCF Data Services . В этой задаче мы добавим в решение консольное приложение, добавим в это новое клиентское приложение ссылку на канал Протокол Open Data Protocol (OData) и обратимся к каналу OData из клиентского приложения с помощью сформированных клиентских классов службы данных и клиентских библиотек.

Dd728278.note(ru-ru,VS.100).gifПримечание
Для доступа к каналу данных наличие клиентского приложения на основе .NET Framework необязательно.Доступ к службе данных любой может получить, используя компонент приложения, реализующий канал OData .Дополнительные сведения см. в разделе Использование службы данных в клиентском приложении (службы WCF Data Services).

Создание клиентского приложения в среде Visual Studio

  1. Щелкните правой кнопкой решение в обозревателе решений и нажмите кнопку Добавить, а затем Новый проект.

  2. Выберите в списке Типы проектов пункт Windows, а затем выберите пункт Приложение WPF в области Шаблоны.

  3. Введите в качестве имени проекта NorthwindClient и нажмите кнопку ОК.

  4. Откройте файл Window1.xaml и замените код XAML на приведенный ниже.

        <Window x:Class="MainWindow"
        xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
        Title="Northwind Orders" Height="335" Width="425" 
            Name="OrdersWindow" Loaded="Window1_Loaded">
        <Grid Name="orderItemsGrid">
            <ComboBox DisplayMemberPath="OrderID" ItemsSource="{Binding}"
                      IsSynchronizedWithCurrentItem="true" 
                      Height="23" Margin="92,12,198,0" Name="comboBoxOrder" VerticalAlignment="Top"/>
            <DataGrid ItemsSource="{Binding Path=Order_Details}"  
                      CanUserAddRows="False" CanUserDeleteRows="False"  
                      Name="orderItemsDataGrid" Margin="34,46,34,50"
                      AutoGenerateColumns="False">
                <DataGrid.Columns>
                    <DataGridTextColumn  Header="Product" Binding="{Binding ProductID, Mode=OneWay}" />
                    <DataGridTextColumn  Header="Quantity" Binding="{Binding Quantity, Mode=TwoWay}" />
                    <DataGridTextColumn  Header="Price" Binding="{Binding UnitPrice, Mode=TwoWay}" />
                    <DataGridTextColumn  Header="Discount" Binding="{Binding Discount, Mode=TwoWay}" />                
                </DataGrid.Columns>     
            </DataGrid>
            <Label Height="28" Margin="34,12,0,0" Name="orderLabel" VerticalAlignment="Top" 
                   HorizontalAlignment="Left" Width="65">Order:</Label>
            <StackPanel Name="Buttons" Orientation="Horizontal" HorizontalAlignment="Right" 
                        Height="40" Margin="0,257,22,0">
                <Button Height="23" HorizontalAlignment="Right" Margin="0,0,12,12" 
                    Name="buttonSave" VerticalAlignment="Bottom" Width="75" 
                        Click="buttonSaveChanges_Click">Save Changes
                </Button>
                <Button Height="23" Margin="0,0,12,12" 
                    Name="buttonClose" VerticalAlignment="Bottom" Width="75" 
                        Click="buttonClose_Click">Close</Button>
            </StackPanel>
        </Grid>
    </Window>
    

Добавление в проект ссылки на службу данных

  1. Щелкните правой кнопкой мыши проект NorthwindClient, выберите команду Добавить ссылку на службу, а затем нажмите кнопку Обнаружить.

    При этом отображается служба данных Northwind, созданная в первой задаче.

  2. В текстовом поле Пространство имен введите Northwind и нажмите кнопку ОК.

    При этом в проект добавляется новый файл кода, содержащий классы данных, которые используются для обращения и взаимодействия с ресурсами службы данных как с объектами. Классы данных создаются в пространстве имен NorthwindClient.Northwind.

Обращение к данным службы данных в приложении WPF

  1. В обозревателе решений под узлом NorthwindClient щелкните проект правой кнопкой мыши и выберите команду Добавить ссылку.

  2. В диалоговом окне «Добавление ссылки» щелкните вкладку .NET, выберите сборку System.Data.Services.Client.dll, а затем нажмите кнопку ОК. В обозревателе решений под узлом NorthwindClient откройте кодовую страницу для файла Window1.xaml и добавьте следующую инструкцию using (Imports в коде на Visual Basic).

    Imports System.Data.Services.Client
    Imports NorthwindClient.Northwind
    
    using System.Data.Services.Client;
    using NorthwindClient.Northwind;
    
  3. Вставьте следующий код, запрашивающий службу данных и привязывающий результат к коллекции DataServiceCollection класса Window1.

    Dd728278.note(ru-ru,VS.100).gifПримечание
    Имя узла localhost:12345 нужно заменить на сервер и порт, на котором размещен экземпляр службы данных Northwind.

    Private context As NorthwindEntities
    Private customerId As String = "ALFKI"
    
    ' Replace the host server and port number with the values 
    ' for the test server hosting your Northwind data service instance.
    Private svcUri As Uri = New Uri("https://localhost:12345/Northwind.svc")
    
    Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs)
        Try
            ' Instantiate the DataServiceContext.
            context = New NorthwindEntities(svcUri)
    
            ' Define a LINQ query that returns Orders and 
            ' Order_Details for a specific customer.
            Dim ordersQuery = From o In context.Orders.Expand("Order_Details") _
                                  Where o.Customer.CustomerID = customerId _
                                  Select o
    
            ' Create an DataServiceCollection(Of T) based on
            ' execution of the LINQ query for Orders.
            Dim customerOrders As DataServiceCollection(Of Order) = New  _
                DataServiceCollection(Of Order)(ordersQuery)
    
            ' Make the DataServiceCollection<T> the binding source for the Grid.
            Me.orderItemsGrid.DataContext = customerOrders
        Catch ex As Exception
            MessageBox.Show(ex.ToString())
        End Try
    End Sub
    
    private NorthwindEntities context;
    private string customerId = "ALFKI";
    
    // Replace the host server and port number with the values 
    // for the test server hosting your Northwind data service instance.
    private Uri svcUri = new Uri("https://localhost:12345/Northwind.svc");
    
    private void Window1_Loaded(object sender, RoutedEventArgs e)
    {
        try
        {
            // Instantiate the DataServiceContext.
            context = new NorthwindEntities(svcUri);
    
            // Define a LINQ query that returns Orders and 
            // Order_Details for a specific customer.
            var ordersQuery = from o in context.Orders.Expand("Order_Details")
                              where o.Customer.CustomerID == customerId
                              select o;
    
            // Create an DataServiceCollection<T> based on 
            // execution of the LINQ query for Orders.
            DataServiceCollection<Order> customerOrders = new
                DataServiceCollection<Order>(ordersQuery);
    
            // Make the DataServiceCollection<T> the binding source for the Grid.
            this.orderItemsGrid.DataContext = customerOrders;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }
    
  4. Вставьте следующий код, сохраняющий изменения в класс Window1.

    Private Sub buttonSaveChanges_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
        Try
            ' Save changes made to objects tracked by the context.
            context.SaveChanges()
        Catch ex As DataServiceRequestException
            MessageBox.Show(ex.ToString())
        End Try
    End Sub
    Private Sub buttonClose_Click(ByVal sender As Object, ByVal a As RoutedEventArgs)
        Me.Close()
    End Sub
    
    private void buttonSaveChanges_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            // Save changes made to objects tracked by the context.
            context.SaveChanges();
        }
        catch (DataServiceRequestException ex)
        {
            MessageBox.Show(ex.ToString());
    
        }
    }
    private void buttonClose_Click(object sender, RoutedEventArgs e)
    {
        this.Close();
    }
    

Сборка и запуск приложения NothwindClient

  1. В обозревателе решений щелкните правой кнопкой мыши проект NorthwindClient и выберите команду Установить как запускаемый проект.

  2. Нажмите клавишу F5 для запуска приложения.

    При этом выполняется сборка решения и запуск клиентского приложения. Данные извлекаются из службы данных и отображаются в консоли.

  3. Измените значение в столбце Количество сетки данных, затем нажмите кнопку Сохранить.

    Изменения будут сохранены в службе данных.

    Dd728278.note(ru-ru,VS.100).gifПримечание
    Эта версия приложения NorthwindClient не поддерживает добавление и удаление сущностей.

Следующие шаги

Итак, мы успешно создали клиентское приложение, обращающееся к образцу канала Northwind OData . Также мы ознакомились с кратким руководством по службам Службы WCF Data Services . Дополнительные сведения о доступе к каналу OData из приложения .NET Framework см. в разделе Клиентская библиотека служб WCF Data Services.

См. также

Основные понятия

Приступая к работе со службами WCF Data Services
Ресурсы служб WCF Data Services