Создание клиентского приложения .NET Framework (краткое руководство по службам WCF Data Services)
Это последняя задача краткого руководства по службам Службы WCF Data Services . В этой задаче мы добавим в решение консольное приложение, добавим в это новое клиентское приложение ссылку на канал Протокол Open Data Protocol (OData) и обратимся к каналу OData из клиентского приложения с помощью сформированных клиентских классов службы данных и клиентских библиотек.
Примечание |
---|
Для доступа к каналу данных наличие клиентского приложения на основе .NET Framework необязательно.Доступ к службе данных любой может получить, используя компонент приложения, реализующий канал OData .Дополнительные сведения см. в разделе Использование службы данных в клиентском приложении (службы WCF Data Services). |
Создание клиентского приложения в среде Visual Studio
Щелкните правой кнопкой решение в обозревателе решений и нажмите кнопку Добавить, а затем Новый проект.
Выберите в списке Типы проектов пункт Windows, а затем выберите пункт Приложение WPF в области Шаблоны.
Введите в качестве имени проекта NorthwindClient и нажмите кнопку ОК.
Откройте файл 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>
Добавление в проект ссылки на службу данных
Щелкните правой кнопкой мыши проект NorthwindClient, выберите команду Добавить ссылку на службу, а затем нажмите кнопку Обнаружить.
При этом отображается служба данных Northwind, созданная в первой задаче.
В текстовом поле Пространство имен введите Northwind и нажмите кнопку ОК.
При этом в проект добавляется новый файл кода, содержащий классы данных, которые используются для обращения и взаимодействия с ресурсами службы данных как с объектами. Классы данных создаются в пространстве имен
NorthwindClient.Northwind
.
Обращение к данным службы данных в приложении WPF
В обозревателе решений под узлом NorthwindClient щелкните проект правой кнопкой мыши и выберите команду Добавить ссылку.
В диалоговом окне «Добавление ссылки» щелкните вкладку .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;
Вставьте следующий код, запрашивающий службу данных и привязывающий результат к коллекции DataServiceCollection класса Window1.
Примечание Имя узла 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()); } }
Вставьте следующий код, сохраняющий изменения в класс 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
В обозревателе решений щелкните правой кнопкой мыши проект NorthwindClient и выберите команду Установить как запускаемый проект.
Нажмите клавишу F5 для запуска приложения.
При этом выполняется сборка решения и запуск клиентского приложения. Данные извлекаются из службы данных и отображаются в консоли.
Измените значение в столбце Количество сетки данных, затем нажмите кнопку Сохранить.
Изменения будут сохранены в службе данных.
Примечание Эта версия приложения NorthwindClient не поддерживает добавление и удаление сущностей.
Следующие шаги
Итак, мы успешно создали клиентское приложение, обращающееся к образцу канала Northwind OData . Также мы ознакомились с кратким руководством по службам Службы WCF Data Services . Дополнительные сведения о доступе к каналу OData из приложения .NET Framework см. в разделе Клиентская библиотека служб WCF Data Services.
См. также
Основные понятия
Приступая к работе со службами WCF Data Services
Ресурсы служб WCF Data Services