Windows Communication Foundation Services and WCF Data Services in Visual Studio

 

Опубликовано: Апрель 2016

Visual Studio 2008 предоставляет инструментарий для работы с технологиями создания распределенных приложений Microsoft WCF (Windows Communication Foundation) и Службы данных WCF. В этом разделе приведены общие сведения о службах с точки зрения Visual Studio.

Что такое WCF?

Windows Communication Foundation (WCF) ― это унифицированная интегрированная среда для создания защищенных, надежных, транзакционных и интероперабельных распределенных приложений. В более ранних версиях Visual Studio имелись некоторые технологии, которые можно было использовать для взаимодействия между приложениями.

Однако если требовалось обеспечить совместный доступ к информации с любых платформ, необходимо было использовать веб-службу (также известную как веб-служба ASMX). Если достаточно было только обеспечить передачу данных между клиентом и сервером, использующим ОС Windows, то использовалось удаленное взаимодействие .NET Remoting. Если требовалось обеспечить транзактные коммуникации, то нужно было использовать Enterprise Services (DCOM), а если требовалось реализовать модель с организацией очереди, то нужно было использовать Message Queuing (или MSMQ).

WCF сводит воедино функциональные возможности всех этих технологий в унифицированную модель программирования. Это упрощает взаимодействие между разработанными распределенными приложениями.

Что представляют собой службы данных WCF?

Службы Службы данных WCF взаимодействуют с базой данных напрямую, что позволяет возвращать данные с помощью стандартных операций HTTP: GET, POST, PUT или DELETE. В общем случае службы Службы данных WCF оптимально подходят для приложений, используемых при создании, обновлении или удалении записей базы данных. Дополнительные сведения см. в разделе Платформа служб данных ADO.NET (страница может быть на английском языке).

Модель программирования WCF

Модель программирования WCF основана на коммуникации между двумя сущностями: службой WCF и клиентом WCF. Эта модель программирования инкапсулирована в пространство имен System.ServiceModel в .NET Framework.

Служба WCF

Служба WCF основана на интерфейсе, задающем контракт между службой и клиентом. Она помечается атрибутом ServiceContractAttribute, как показано в следующем коде:

    [ServiceContract]
    public interface IService1
<ServiceContract()>
Public Interface IService1
        [OperationContract]
        string GetData(string value);
    <OperationContract()>
    Function GetData(ByVal value As String) As String

Методы и функции, которые предоставляются службой WCF, задаются путем пометки их атрибутом OperationContractAttribute. Кроме того, можно предоставить сериализованные данные, пометив составной тип атрибутом DataContractAttribute. Это делает возможным привязку данных на клиенте.

После того как интерфейс и его методы были определены, они инкапсулируются в класс, реализующий этот интерфейс. Множественные контракты службы WCF может реализовать единственный ее класс.

Служба WCF предоставляется для использования посредством того, что называется конечной точкой. Конечная точка ― это единственный способ сообщения с этой службой; невозможно получить к ней доступ посредством прямой ссылки, в отличие от других классов..

Конечная точка состоит из адреса, привязки и контракта. Адрес задает расположение сервера; это может быть URL-адрес, FTP-адрес, а также сетевой или локальный путь. Привязка задает способ сообщения с этой службой. Привязки WCF предоставляют гибкую модель для задания протокола, например HTTP или FTP, механизма обеспечения безопасности, например проверка подлинности Windows или имена и пароли пользователей, и многого другого. Контракт включает операции, предоставляемые классом службы WCF.

Для одной службы WCF может быть предоставлено несколько конечных точек. Это дает возможность разным клиентам взаимодействовать с одной и той же службой разными способами. Например, банковская служба может предоставить одну конечную точку для сотрудников, а другую ― для внешних клиентов, причем каждая конечная точка будет использовать другой адрес, привязку и/или контракт.

Клиент WCF

Клиент WCF состоит из прокси, позволяющего приложению сообщаться со службой (WCF), и конечной точки, соответствующей конечной точке, заданной для этой службы. Прокси создается на стороне клиента в файле app.config и включает информацию о типах и методах, предоставляемых службой. В случае служб, предоставляющих несколько конечных точек, клиент может выбрать одну, лучше всего соответствующую его требованиям; например, клиент может выбрать способ сообщения посредством протокола HTTP и проверку подлинности Windows.

После создания клиента WCF можно обращаться к его службе в коде точно так же, как это делается с любым другим объектом.. Например, для вызова метода GetData, показанного выше, можно написать примерно следующий код:

        private void button1_Click(System.Object sender, System.EventArgs e)
        {
            ServiceReference1.Service1Client client = new
                ServiceReference1.Service1Client();
            string returnString;

            returnString = client.GetData(textBox1.Text);
            label1.Text = returnString;
        }
    Private Sub Button1_Click(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles Button1.Click
        Dim client As New ServiceReference1.Service1Client
        Dim returnString As String

        returnString = client.GetData(TextBox1.Text)
        Label1.Text = returnString
    End Sub

Средства WCF в Visual Studio

В Visual Studio 2008 предусмотрены средства, позволяющие создавать как службы, так и клиенты WCF. Пошаговое руководство, демонстрирующее эти средства, см. в разделе Walkthrough: Creating and Accessing WCF Services.

Создание и тестирование служб WCF

Для быстрого создания своей собственной службы можно воспользоваться шаблонами WCF Visual Studio в качестве основы. Затем с помощью инструментов Auto Host службы WCF и WCF Test Client отладить и протестировать службу. Оба этих инструмента обеспечивают быстрый и удобный цикл отладки и тестирования, и исключают требование зафиксировать модель размещения на ранней стадии.

Шаблоны WCF

Шаблоны WCF Visual Studio предоставляют базовую структуру класса для разработки службы. Несколько шаблонов WCF доступно в диалоговом окне Добавление нового проекта. В частности, это шаблоны проектов библиотеки службы WCF, веб-узлов службы WCF и элементов службы WCF.

При выборе шаблона файлы добавляются в контракт службы, в реализацию службы и в конфигурацию службы. Также добавляются все необходимые атрибуты, создавая простую службу типа "Hello World", и создавать какой-либо код нет необходимости. Конечно, может потребоваться добавить код для обеспечения функций и методов реальной службы, потому что шаблоны предоставляют лишь основу для конструктора.

Дополнительные сведения о шаблонах WCF см. в разделе Шаблоны WCF в Visual Studio.

узел службы WCF

При запуске отладчика Visual Studio (путем нажатия F5) для проекта службы WCF автоматически запускается инструмент узел службы WCF для размещения этой службы локально. узел службы WCF составляет список служб в проекте службы WCF, загружает конфигурацию проекта и создает узел для каждой найденной службы.

С помощью узла службы WCF можно тестировать службу WCF без создания дополнительного кода или фиксации в конкретном узле во время разработки.

Дополнительные сведения об узле службы WCF см. в разделе Узел службы WCF (WcfSvcHost.exe).

Клиент теста WCF

Инструмент Клиент теста WCF позволяет ввести тестовые параметры, отправить их в службу WCF и увидеть ответную реакцию службы. При комбинированном использовании с узлом службы WCF этот инструмент обеспечивает удобную практику тестирования службы.

При нажатии клавиши F5 для отладки проекта службы WCF открывается Клиент теста WCF, который выводит список конечных точек службы, заданных в файле конфигурации. Можно протестировать эти параметры и запустить службу, и повторять этот процесс для последовательного тестирования и проверки службы.

Дополнительные сведения о Клиенте теста WCF см. в разделе Тестовый клиент WCF (WcfTestClient.exe).

Доступ к службам WCF в Visual Studio

Visual Studio упрощает задачу создания клиентов WCF автоматически создавая прокси и конечную точку для службы, добавляемые с помощью Добавить ссылку на службу диалоговое окно. Вся необходимые сведения о конфигурации добавляются в файл app.config. Большей частью все, что необходимо сделать — это создать службу, чтобы потом ее использовать.

В диалоговом окне Добавить ссылку на службу можно вводить адрес службы или искать службу, заданную в решении. В этом окне содержится список служб и операций, которые они предоставляют. В нем также можно задать пространство имен, посредством которого в коде будут делаться ссылки на эти службы.

Диалоговое окно Настройка ссылок на службы позволяет настроить конфигурацию службы. В нем можно изменить адрес службы, задать уровень доступа, поведение в асинхронном режиме, типы контрактов сообщений, а также настроить повторное использование типов.

Как Выберите конечную точку службы

Некоторые службы Windows Communication Foundation (WCF) предоставляют несколько конечных точек, с помощью которых клиент может сообщаться с сервером. Например, служба может предоставлять одну конечную точку, использующую привязку HTTP и проверку подлинности в виде имени пользователя/пароля, и вторую конечную точку, использующую FTP и проверку подлинности Windows. Первую конечную точку могут использовать приложения, осуществляющие доступ к службе, расположенной снаружи брандмауэра, в то время как вторую конечную точку можно использовать в интрасети.

В таком случае можно задать endpointConfigurationName в качестве параметра конструктора для ссылки на службу.

Примечание

Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE.

Чтобы выбрать конечную точку службы

  1. Добавьте ссылку на службу WCF. Дополнительные сведения см. в разделе How to: Add, Update, or Remove a Service Reference.

  2. В редакторе кода добавьте конструктор для ссылки на службу:

    Dim proxy As New ServiceReference.Service1Client(  
    
    ServiceReference.Service1Client proxy = new ServiceReference.Service1Client(  
    

    Примечание

    Замените ServiceReference пространством имен для ссылки на службу, а Service1Client замените именем службы.

  3. Появится список IntelliSense с перегрузками для конструктора. Выберите перегрузку endpointConfigurationName As String.

  4. Согласно перегрузке, введите = ИмяКонфигурации, где ИмяКонфигурации — это имя нужной конечной точки.

    Примечание

    Если имена доступных конечных точек неизвестны, их можно найти в файле app.config.

Чтобы найти доступные конечные точки для службы WCF

  1. В Обозревателе решений щелкните правой кнопкой мыши файл app.config проекта, содержащий ссылку на эту службу, а затем щелкните Открыть. Этот файл появится в редакторе кода.

  2. Найдите в файле тег <Client>.

  3. Найдите под тегом <Client> тег, начинающийся с <Endpoint>.

    Если ссылка на службу предоставляет несколько конечных точек, найдется два или более тега <Endpoint.

  4. В теге <EndPoint> вы найдете параметр name="SomeService" (где SomeService представляет имя конечной точки). Это имя конечной точки, которое может быть передано в перегрузку endpointConfigurationName As String конструктора для ссылки на службу.

Как Вызовите метод служб асинхронно

Большинство методов в службах Windows Communication Foundation (WCF) может быть вызвано как синхронно, так и асинхронно. Асинхронный вызов метода позволяет приложению работать во время выполнения этого вызова через медленное соединение.

По умолчанию при добавлении в проект ссылки на службу задается синхронный вызов методов.. Синхронный вызов можно изменить на асинхронный, изменив параметр в диалоговом окне Настроить ссылку на службу.

Примечание

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

Примечание

Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE.

Чтобы задать асинхронный вызов метода службы

  1. В Обозревателе решений выберите нужную ссылку на службу.

  2. В меню Проект щелкните Настроить ссылку на службу.

  3. В диалоговом окне Настройка ссылок на службы поставьте флажок Создать асинхронные операции.

Как Привязка данных, возвращаемых службой

Данные, возвращаемые службой Windows Communication Foundation (WCF), можно привязать к элементу управления так же, как данные из любого другого источника. Если служба WCF содержит составные типы, возвращающие данные, то при добавлении ссылки на эту службу возвращаемые данные автоматически добавляются в окно Источники данных.

Чтобы привязать элемент управления к одному полю данных, возвращаемому службой WCF

  1. В меню Данные выберите пункт Показать источники данных. Появится окно Источники данных.

  2. В окне Источники данных разверните узел нужной ссылки на службу. Будут выведены все составные типы, возвращаемые службой.

  3. Разверните узел типа. Будут выведены поля данных для этого типа.

  4. Выберите поле и щелкните стрелку раскрывающегося списка, чтобы вывести список элементов управления, доступных для выбранного типа данных.

  5. Щелкните тип элемента управления, который необходимо привязать.

  6. Перетащите поле на форму. Элемент управления будет добавлен в форму вместе с компонентами BindingSource и BindingNavigator.

  7. Повторите шаги с четвертого по шестой для всех остальных полей, для которых нужно выполнить привязку.

Чтобы привязать элемент управления к составному типу, возвращаемому службой WCF

  1. В меню Данные выберите Показать источники данных. Появится окно Источники данных.

  2. В окне Источники данных разверните узел нужной ссылки на службу. Будут выведены все составные типы, возвращаемые службой.

  3. Выберите узел типа и щелкните стрелку раскрывающегося списка, чтобы вывести список доступных параметров.

  4. Щелкните либо DataGridView, чтобы вывести данные в виде таблицы, либо Details, чтобы вывести данные в отдельных элементах управления.

  5. Перетащите узел на форму. Элементы управления будут добавлены в форму вместе с компонентами BindingSource и BindingNavigator.

Как Настройте службу повторно использовать существующие типы

При добавлении в проект ссылки на службу в этом локальном проекте создаются все типы, заданные в службе. Если служба использует общие типы .NET Framework, или типы заданы в общей библиотеке, то в результате в большинстве случаев создаются дублирующиеся типы.

Чирбы избежать этой проблемы, типы в сборках, на которые есть ссылки, по умолчанию являются совместно используемыми. Если требуется отключить совместное использование типов для одной или нескольких сборок, это можно сделать в диалоговом окне Настройка ссылок на сборки.

Чтобы отключить совместное использование типов в одной сборке

  1. В Обозревателе решений выберите нужную ссылку на службу.

  2. В меню Проект щелкните Настроить ссылку на службу.

  3. В диалоговом окне Настройка ссылок на службы выберите Повторно использовать типы в указанных сборках, на которые имеется ссылка.

  4. Поставьте флажок для каждой сборки, в которой нужно включить совместное использование типов. Чтобы отключить совместное использование типов, снимите этот флажок.

Чтобы отключить совместное использование типов во всех сборках

  1. В Обозревателе решений выберите нужную ссылку на службу.

  2. В меню Проект щелкните Настроить ссылку на службу.

  3. В диалоговом окне Настройка ссылок на службы уберите флажок Повторно использовать типы в указанных сборках, на которые имеется ссылка.

Связанные разделы

Заголовок Описание
Walkthrough: Creating and Accessing WCF Services Пошаговая демонстрация создания и использования служб WCF в Visual Studio.
Walkthrough: Creating and Accessing a WCF Data Service in Visual Studio Пошаговая демонстрация создания и использования Службы данных WCF в Visual Studio.
Использование средств разработки WCF Обсуждение способов создания и тестирования служб WCF в Visual Studio.
How to: Add, Update, or Remove a Service Reference Описание способов добавления, обновления и удаления служб WCF в проекте.
How to: Add, Update, or Remove a WCF Data Service Reference Описание способов, позволяющих создавать ссылки на Службы данных WCF и использовать эти службы в Visual Studio.
How to: Add a Reference to a Web Service Описание способа добавления в проект ссылки на веб-службу XML (ASMX).
Troubleshooting Service References Описание некоторых наиболее распространенных ошибок, возникающих при ссылках на службы, и способов их устранения.
Отладка служб WCF Описание наиболее часто возникающих проблем, связанных с отладкой, а также методов отладки служб WCF.
Windows Communication Foundation Authentication Service Overview Описание использования WCF для предоставления службы роли для веб-узла.
Messaging in the .NET Compact Framework В этом разделе описывается поддержка уровня сообщений WCF в .NET Compact Framework.
Пошаговое руководство. Создание многоуровневого приложения для работы с данными Предоставляет пошаговые инструкции для создания типизированного набора данных и разделения кода адаптера таблицы и кода набора данных на несколько проектов.
Add Service Reference Dialog Box Описание элементов пользовательского интерфейса диалогового окна Добавить ссылку на службу.
Диалоговое окно "Настроить ссылку на службу" Описание элементов пользовательского интерфейса диалогового окна Настройка ссылок на службы.

Ссылки

System.ServiceModel

System.Data.Services