Службы Windows Communication Foundation и службы данных WCF в Visual Studio

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

Что такое WCF

Windows Communication Foundation (WCF) — это унифицированная платформа для создания безопасных, надежных, транзакционных и функционально совместимых распределенных приложений. Он заменяет старые технологии межпроцессного взаимодействия, такие как веб-службы ASMX, удаленное взаимодействие .NET, корпоративные службы (распределенная объектная модель компонента (DCOM)) и очередь сообщений Майкрософт (MSMQ). WCF объединяет функциональные возможности всех этих технологий в рамках единой модели программирования. Это упрощает разработку распределенных приложений.

Что такое WCF Data Services

службы данных WCF — это реализация стандарта протокола Open Data (Open Data Protocol (OData)). В WCF Data Services можно предоставлять табличные данные в виде набора REST API, что позволяет возвращать данные с помощью стандартных HTTP-команд, таких как GET, POST, PUT и DELETE. На стороне сервера WCF Data Services заменяет веб-API ASP.NET для создания новых служб OData. Клиентская библиотека WCF Data Services по-прежнему рекомендуется для использования служб OData в приложении .NET из Visual Studio (Проект>Добавить ссылку на службу). Дополнительные сведения см. в разделе Службы данных WCF 4.5.

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

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

Служба WCF

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

[ServiceContract]
public interface IService1

Вы определяете функции или методы, предоставляемые службой WCF, помечая их атрибутом OperationContractAttribute.

[OperationContract]
string GetData(string value);

Кроме того, вы можете предоставить сериализованные данные, пометив составной тип атрибутом 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;
}

Инструменты WCF в Visual Studio

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

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

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

Шаблоны 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 он обеспечивает удобный интерфейс тестирования службы. Этот инструмент находится в папке %ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\Common7\IDE.

Когда вы нажимаете клавишу 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, щелкнув правой кнопкой мыши узел проекта в обозревателе решений и выбрав Добавить ссылку на службу.

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

    ServiceReference.Service1Client proxy = new ServiceReference.Service1Client(
    

    Примечание.

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

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

  4. После перегрузки введите =ConfigurationName, где ConfigurationName — имя конечной точки, которую вы хотите использовать.

    Примечание.

    Если вам не известны имена доступных конечных точек, их можно найти в файле 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. В диалоговом окне "Настройка ссылки на службу" выберите поле "Создать асинхронные операции" проверка box.

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

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

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

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

    Открывается окно Источники данных.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  4. Выберите проверка box для каждой сборки, в которой требуется включить общий доступ к типам. Чтобы отключить общий доступ к типам для сборки, оставьте поле проверка box снятым.

Отключение совместного использования типов во всех сборках

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

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

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

Заголовок Description
Пошаговое руководство. Создание простой службы WCF в Windows Forms Пошаговая демонстрация создания и использования служб WCF в Visual Studio.
Пошаговое руководство. Создание службы данных WCF с помощью WPF и Entity Framework Пошаговая демонстрация создания и использования WCF Data Services в Visual Studio.
Использование средств разработки WCF Обсуждение создания и тестирования служб WCF в Visual Studio.
Практическое руководство. Добавление, обновление или удаление ссылки на службу данных WCF
Диагностика ссылок на службы Некоторые распространенные ошибки, которые могут возникать в ссылках на службы, и способы их предотвращения.
Отладка служб WCF Описание распространенных проблем и методов отладки, с которыми вы можете столкнуться при отладке служб WCF.
Пошаговое руководство. Создание n-уровневого приложения для работы с данными Содержит пошаговые инструкции по созданию типизированного набора данных и разделения кода адаптера таблицы и набора данных на несколько проектов.
Диалоговое окно "Настроить ссылку на службу" Описание элементов пользовательского интерфейса в диалоговом окне Настройка ссылки на службу.

Справочные материалы

См. также