Как установить wcf в visual studio 2019
Today there are many organizations that need to communicate and exchange data with external applications, in order to acquire web services with which they do not have and meet the needs of their potential customers.
In more technical terms, our first objective is to implement the application logic of a particular system that accesses the database and provides web services for the manipulation of this data. From this, the second objective is to use these services, in order to worry only about the design of the corresponding web pages in this instance.
Web services with SOAP
SOAP web services, or "big" web services, are those that use XML messages for intercom, which follow the Simple Object Access Protocol (SOAP) standard, an XML language that defines the architecture and format of messages. Such systems typically contain a machine-readable description of the operations offered by the service, written in Web Services Description Language (WSDL), which is an XML-based language for defining interfaces syntactically.
The overall idea of the solution:
Activities:
The article will have two important parts:
- Part 1: Implementing a Web Service with SOAP
- Part 2: Consuming SOAP services with DotVVM
Resources needed:
To follow this article step by step or run the included demo, it is necessary to have the following tools:
In this first part we will have three important parts:
As a case study for this tutorial user data will be handled through CRUD operations: create, read, update, and delete.
The database for the application domain
The database consists of a single table named: User, with attributes: Id , FirstName , LastName , Username , Password and EnrrollmentDate .
The SQL statement for creating the User table is as follows:
Exit fullscreen mode
All right, with the database ready, we can start with the implementation of the first project for SOAP service development.
WCF Service Application Project
In Visual Studio 2019 the first thing we'll do is create a new project of type WCF Service Application (within the C-Web category):
With this project, we will create access to the database, the definition of the service interface, and the corresponding implementation, in this case, for the User entity.
Access to the database with Entity Framework
To establish entities through classes and the database connection, you can use the Entity Framework Database First approach, which allows you to scaffold from the database to the project, that is, automatically generate classes according to the entities established in the database and the connection in the project.
For this purpose, you need to install three NuGet packages:
- Microsoft.EntityFrameworkCore.Design
- Microsoft.EntityFrameworkCore.Tools
- MySql.Data.EntityFrameworkCore
If you are working with SQL Server, the NuGet package to install will be: Microsoft.EntityFrameworkCore.SQLServer .
Note: To find the NuGet Package Management Center, we can go to the options menu -> Project -> Handle NuGet Packages.
With the installation of these NuGet packages, we will now open the Package Management Console to enter a command that will allow you to perform scaffolding from the database:
Exit fullscreen mode
The result is as follows:
Here, the User class is defined as follows:
Exit fullscreen mode
And the DBContext , which has the configuration with the database and will allow us to perform the corresponding operations on it.
Set DTOs - Data Transfer Objects
In order to transport the data between the processes for database management and operations to work with the web services, it is advisable to establish the DTO classes for each entity in the project, in this case, a DTO for the entity User .
To do this we will define a new folder within the project called DTO and create a class called UserDTO , whose attributes will be the same as the User class defined in the Entities section above:
Exit fullscreen mode
Service contracts
The fundamental thing in a SOAP web service is the contract that exists between client and service, that is, the WSDL document. Therefore, when creating web services it is advisable to start by defining that contract. This way we'll have more control over the data that is serialized during service invocation, so we can define the data structures that we consider most appropriate for the exchange. In this case, we will define the operations to implement in the web service through an interface. The result will be as follows:
Exit fullscreen mode
Then we must implement this interface, in which we will find the established methods, along with the operations necessary to receive and send the corresponding data. In this case, the file is in an extension of .svc and the code of the operations will be as follows:
Exit fullscreen mode
A. Get the list of all registered users
Exit fullscreen mode
B. Get the data of a specific user according to their ID
Exit fullscreen mode
C. Insert a new user
Exit fullscreen mode
D. Update a specific user's data
Exit fullscreen mode
E. Delete a user based on their ID
Exit fullscreen mode
The interface (.cs) and deployment (.svc) file will look like this within the Visual Studio solution:
With these few steps followed so far, the SOAP service for handling user data is ready to run.
Test the SOAP service developed
To test the deployed service we have several ways, one of them is to place ourselves in the SVC service implementation file and run the project. In this run, the WCF Test Client will be executed and will help us test the implemented functions.
In a first example we can test the Get() method and display the list of registered users, as we can see in the following image:
Another case may be to get a specific user based on their ID, for this we will select the GetUserById() operation, and in this selection, the WCF test client will tell us the input parameters that we need to specify. The result is as follows:
As an additional example, we can analyze the case of creating a new user through the InsertUser() operation, along with its corresponding input parameters:
Then we will have to specify the body XML with the input parameters to send, in this case, the user ID:
Exit fullscreen mode
Finally, when we make the request to the SOAP service we will get the XML response. The fields and results in Postman can be displayed in the following image:
The call of the other operations will be seen when using these services directly from a web application with DotVVM.
Part 2: Consuming WCF services with DotVVM
In this second part we will have two important parts:
- 1. Set methods for communication with SOAP services defined above.
- 2.Implement the views and models of these views for the development of the corresponding web page.
The purpose of these web pages is to publicize the resulting data, from the consumption of CRUD operations: create, read, update, and delete set out in the SOAP service contract.
In DotVVM, communication between HTML (web pages) and C-code (source code) is done through the MVVM design pattern (Model, View, ViewModel). The purpose of these elements are as follows:
- The model. — is responsible for all application data and related business logic.
- The view. — Representations for the end-user of the application model. The view is responsible for displaying the data to the user and allowing manipulation of application data.
- Model-View or View-Model. — one or more per view; the model-view is responsible for implementing view behavior to respond to user actions and for easily exposing model data.
Set the reference with WCF Web Service
As the first point what we will need to do, is to establish a reference to the WCF service implemented earlier. For this purpose within the Visual Studio solution, we can go to the Connected Services section and select Add Connected Service :
In the Connected Service Profiles section we will select the option: Microsoft WCF Web Service Reference Provider :
From this selection, the WCF Web Service Reference configuration wizard will be initialized, and in this section, we will need to specify the URL with the WSDL metadata of the SOAP service, for this our WCF project must be running.
When you select Finish, the wizard will perform a scaffolding process, that is, generate the corresponding files to access this service.
At the end of the operation, we will see some classes and files like these:
Models and logic of the application
Next, we need to implement the models and services that will consume the operations implemented in SOAP and set the logic of our application. In this case, what you are looking for is to have a general list of users and specific information on each of them.
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в этой статье. Возможно, вы используете другой выпуск Visual Studio или другие параметры среды. Дополнительные сведения см. в разделе Персонализация среды IDE.
Предварительные требования
Создание службы
В меню Файл щелкните Создать > Проект.
На начальном экране выберите Создать проект.
На странице Настройка нового проекта нажмите кнопку создать.
Будет создана работающая служба, которую можно протестировать и использовать. Следующие два действия демонстрируют, как можно изменить метод по умолчанию для использования другого типа данных. В реальном приложении необходимо также добавить к службе ее специальные функции.
в Обозреватель решений дважды щелкните IService1. vb или IService1. cs.
Найдите следующую строку:
Измените тип value параметра на String:
Обратите внимание OperationContract на атрибут в приведенном выше коде. Этот атрибут является обязательным для любого метода, предоставляемого службой.
в Обозреватель решений дважды щелкните Service1. vb или Service1. cs.
Найдите следующую строку:
Измените тип value параметра на String:
Тестирование службы
Нажмите клавишу F5, чтобы запустить службу. Откроется форма тестового клиента WCF , которая загружает службу.
В форме Тестовый клиент WCF дважды щелкните метод GetData() в разделе IService1. Откроется вкладка GetData .
В диалоговом окне Запрос выберите поле Значение и введите Hello .
В меню Файл щелкните Выход, чтобы закрыть тестовую форму.
Доступ к службе
Ссылка на службу WCF
В меню файл наведите указатель мыши на пункт Добавить и выберите пункт создать Project.
Щелкните правой кнопкой мыши WindowsApplication1 и выберите команду Добавить ссылку на службу. Откроется диалоговое окно Добавить ссылку на службу.
В диалоговом окне Добавление ссылки на службу выберите Найти.
Service1 отображается в области службы .
Создайте клиентское приложение
В Обозревателе решений дважды щелкните Form1.vb или Form1.cs, чтобы открыть конструктор Windows Forms, если он еще не открыт.
Из Панели элементов перетащите на форму элемент управления TextBox , элемент управления Label и элемент управления Button .
Дважды щелкните Button и добавьте следующий код в обработчик событий Click :
В Обозревателе решений щелкните правой кнопкой мыши WindowsApplication1 и выберите команду Назначить запускаемым проектом.
Нажмите клавишу F5 , чтобы запустить проект. Введите любой текст и нажмите кнопку. На этой метке отображается введенный текст:.
В Visual Studio имеются инструменты для работы с Windows Communication Foundation (WCF) и WCF Data Services, технологиями Майкрософт для создания распределенных приложений. В этом разделе представлены общие сведения о службах с точки зрения Visual Studio. Полную документацию можно найти на странице WCF Data Services 4.5.
Что такое WCF
Что такое WCF Data Services
Модель программирования WCF
Служба WCF
Служба WCF построена на интерфейсе, который определяет контракт между службой и клиентом. Он помечается атрибутом ServiceContractAttribute, как показано в следующем коде.
Вы определяете функции или методы, предоставляемые службой WCF, помечая их атрибутом OperationContractAttribute.
Кроме того, вы можете предоставить сериализованные данные, пометив составной тип атрибутом DataContractAttribute. Это позволяет выполнять привязку данных в клиенте.
После определения интерфейса и его методов они инкапсулируются в класс, реализующий интерфейс. Один класс службы WCF может реализовывать несколько контрактов службы.
Служба WCF предоставляется для использования через так называемую конечную точку. Конечная точка обеспечивает единственный способ связи со службой; нельзя получить доступ к этой службе, используя прямую ссылку, как это делается с другими классами.
Для одной службы WCF могут предоставляться несколько конечных точек. Это позволяет различным клиентам взаимодействовать с одной и той же службой разными способами. Например, банковская служба может предоставлять одну конечную точку для сотрудников, а другую — для внешних клиентов. При этом каждая из конечных точек использует свой адрес, привязку и (или) контракт.
клиент WCF
После создания клиента WCF вы можете ссылаться на эту службу в своем коде так же, как на любой другой объект. Например, чтобы вызвать метод GetData , показанный ранее, вы должны написать код, похожий на следующий:
Инструменты WCF в Visual Studio
Visual Studio предоставляет инструменты, которые помогут вам создавать как службы, так и клиенты WCF. Пошаговое руководство, демонстрирующее эти средства, см. в разделе Пошаговое руководство: создание простой службы WCF в Windows Forms.
Создание и тестирование служб WCF
Вы можете использовать шаблоны WCF в Visual Studio в качестве основы для быстрого создания собственной службы. Затем с помощью WCF Service Auto Host и тестового клиента WCF можно выполнить отладку и тестирование службы. Оба этих инструмента обеспечивают быстрый и удобный цикл отладки и тестирования и устраняют необходимость фиксации модели размещения на ранней стадии.
Шаблоны WCF
Шаблоны WCF в Visual Studio предоставляют базовую структуру классов для разработки служб. Несколько шаблонов WCF доступно в диалоговом окне Добавление нового проекта. К ним относятся проекты lLibrary службы 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. В большинстве случаев все, что вам нужно сделать, это создать экземпляр службы, чтобы использовать его.
В диалоговом окне Добавление ссылки на службу можно ввести адрес для службы или выполнить поиск службы, которая определена в вашем решении. Это диалоговое окно возвращает список служб и действий, которые они предоставляют. Оно также позволяет определить пространство имен, по которому вы будете ссылаться на службы в коде.
Практическое руководство. Выбор конечной точки службы
В таком случае вы можете указать endpointConfigurationName в качестве параметра конструктора для ссылки на службу.
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в этой статье. Возможно, вы используете другой выпуск Visual Studio или другие параметры среды. Дополнительные сведения см. в разделе Персонализация среды IDE.
Выбор конечной точки службы
Добавьте ссылку на службу WCF, щелкнув правой кнопкой мыши узел проекта в обозревателе решений и выбрав Добавить ссылку на службу.
В редакторе кода добавьте конструктор для ссылки на службу:
Замените ServiceReference на пространство имен для ссылки на службу и замените Service1Client на имя службы.
В списке IntelliSense отображаются перегрузки для конструктора. Выберите перегрузку endpointConfigurationName As String .
После перегрузки введите = ConfigurationName, где ConfigurationName — имя конечной точки, которую вы хотите использовать.
Если вам не известны имена доступных конечных точек, их можно найти в файле app.config.
Поиск доступных конечных точек для службы WCF
В Обозревателе решений щелкните правой кнопкой мыши файл app.config для проекта, который содержит ссылку на службу, а затем нажмите Открыть. Этот файл откроется в редакторе кода.
Выполните поиск по тегу в этом файле.
Под тегом найдите тег, который начинается с .
Если ссылка на службу предоставляет несколько конечных точек, будет два или более тега
Внутри тега находится параметр name=" SomeService " (где SomeService представляет имя конечной точки). Это имя конечной точки, которое можно передать в перегрузку endpointConfigurationName As String конструктора для ссылки на службу.
Практическое руководство. Асинхронный вызов метода службы
Большинство методов в службах Windows Communication Foundation (WCF) можно вызывать синхронно или асинхронно. Асинхронный вызов метода позволяет вашему приложению продолжать работу, пока метод вызывается, когда используется медленное соединение.
Когда в проект добавляется ссылка на службу, по умолчанию она настраивается для синхронного вызова методов. Вы можете изменить это поведение и задать асинхронный вызов методов, изменив соответствующий параметр в диалоговом окне Настройка ссылки на службу.
Этот параметр устанавливается отдельно для каждой службы. Если один метод для службы вызывается асинхронно, то все методы должны вызываться асинхронно.
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в этой статье. Возможно, вы используете другой выпуск Visual Studio или другие параметры среды. Дополнительные сведения см. в разделе Персонализация среды IDE.
Асинхронный вызов метода службы
В Обозревателе решений нажмите ссылку на службу.
В меню Проект выберите Настроить ссылку на службу.
В диалоговом окне Настройка ссылки на службу установите флажок Создавать асинхронные операции.
Практическое руководство. Привязка данных, возвращаемых службой
Вы можете привязать к элементу управления данные, возвращаемые службой Windows Communication Foundation (WCF), так же, как выполняется привязка к элементу управления любого другого источника данных. Если вы добавляете ссылку на службу WCF, и эта служба содержит составные типы, возвращающие данные, они автоматически добавляются в окно Источники данных.
Привязка элемента управления к одному полю данных, возвращаемому службой WCF
В меню Данные выберите команду Показать источники данных.
Открывается окно Источники данных.
В окне Источники данных разверните узел для вашей ссылки на службу. Появятся все составные типы, возвращаемые службой.
Разверните узел для типа. Появятся поля данных для этого типа.
Выберите поле и щелкните стрелку раскрывающегося списка, чтобы вывести список элементов управления, доступных для этого типа данных.
Щелкните тип элемента управления, к которому вы хотите привязать данные.
Перетащите это поле в форму. Элемент управления будет добавлен в форму вместе с компонентами BindingSource и BindingNavigator.
Повторите шаги с 4 по 6 для всех остальных полей, которые хотите привязать.
Привязка элемента управления к составному типу, возвращаемому службой WCF
В меню Данные выберите пункт Показать источники данных. Открывается окно Источники данных.
В окне Источники данных разверните узел для вашей ссылки на службу. Появятся все составные типы, возвращаемые службой.
Выберите узел для типа и щелкните стрелку раскрывающегося списка, чтобы вывести список доступных вариантов.
Щелкните DataGridView, чтобы отобразить данные в сетке, или Подробности, чтобы отобразить данные в отдельных элементах управления.
Перетащите узел в форму. Элементы управления будут добавлены в форму вместе с компонентами BindingSource и BindingNavigator.
Практическое руководство. Настройка службы для повторного использования существующих типов
Для устранения этой проблемы типы в указанных сборках по умолчанию являются общими. Если вы хотите отключить совместное использование типов для одной или нескольких сборок, это можно сделать в диалоговом окне Настройка ссылок на службы.
Отключение совместного использования типов в одной сборке
В Обозревателе решений нажмите ссылку на службу.
В меню Проект выберите Настроить ссылку на службу.
В диалоговом окне Настройка ссылок на службы установите флажок Повторно использовать типы в указанных сборках, на которые есть ссылки.
Установите этот флажок для каждой сборки, в которой вы хотите включить совместное использование типов. Чтобы отключить совместное использование типов для сборки, снимите этот флажок.
Отключение совместного использования типов во всех сборках
В Обозревателе решений нажмите ссылку на службу.
В меню Проект выберите Настроить ссылку на службу.
В диалоговом окне Настройка ссылок на службы снимите флажок Повторно использовать типы в указанных сборках, на которые есть ссылки.
Visual Studio provides tools for working with Windows Communication Foundation (WCF) and WCF Data Services, Microsoft technologies for creating distributed applications. This topic provides an introduction to services from a Visual Studio perspective. For the full documentation, see WCF Data Services 4.5.
What Is WCF?
What are WCF Data Services
WCF programming model
WCF Service
A WCF service is based on an interface that defines a contract between the service and the client. It is marked with a ServiceContractAttribute attribute, as shown in the following code:
You define functions or methods that are exposed by a WCF service by marking them with a OperationContractAttribute attribute.
In addition, you can expose serialized data by marking a composite type with a DataContractAttribute attribute. This enables data binding in a client.
After an interface and its methods are defined, they are encapsulated in a class that implements the interface. A single WCF service class can implement multiple service contracts.
A WCF service is exposed for consumption through what is known as an endpoint. The endpoint provides the only way to communicate with the service; you cannot access the service through a direct reference as you would with other classes.
Multiple endpoints can be exposed for a single WCF service. This enables different clients to communicate with the same service in different ways. For example, a banking service might provide one endpoint for employees and another for external customers, each using a different address, binding, and/or contract.
WCF client
After a WCF client has been created, you reference the service in your code just as you would any other object. For example, to call the GetData method shown earlier, you would write code that resembles the following:
WCF tools in Visual Studio
Visual Studio provides tools to help you create both WCF services and WCF clients. For a walkthrough that demonstrates the tools, see Walkthrough: Creating a simple WCF service in Windows Forms.
Create and test WCF services
You can use the WCF Visual Studio templates as a foundation to quickly create your own service. You can then use WCF Service Auto Host and WCF Test Client to debug and test the service. These tools together provide a fast and convenient debug and testing cycle, and eliminate the requirement to commit to a hosting model at an early stage.
WCF Templates
WCF Visual Studio templates provide a basic class structure for service development. Several WCF templates are available in the Add New Project dialog box. These include WCF service lLibrary projects, WCF service websites, and WCF Service item templates.
When you select a template, files are added for a service contract, a service implementation, and a service configuration. All necessary attributes are already added, creating a simple "Hello World" type of service, and you did not have to write any code. You will, of course, want to add code to provide functions and methods for your real world service, but the templates provide the basic foundation.
To learn more about WCF templates, see WCF Visual Studio templates.
WCF service host
When you start the Visual Studio debugger (by pressing F5) for a WCF service project, the WCF Service Host tool is automatically started to host the service locally. WCF Service Host enumerates the services in a WCF service project, loads the project's configuration, and instantiates a host for each service that it finds.
By using WCF Service Host, you can test a WCF service without writing extra code or committing to a specific host during development.
To learn more about WCF Service Host, see WCF service host (WcfSvcHost.exe).
WCF test client
The WCF Test Client tool enables you to input test parameters, submit that input to a WCF service, and view the response that the service sends back. It provides a convenient service testing experience when you combine it with WCF Service Host. Find the tool in the %ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\Common7\IDE folder.
When you press F5 to debug a WCF service project, WCF Test Client opens and displays a list of service endpoints that are defined in the configuration file. You can test the parameters and start the service, and repeat this process to continuously test and validate your service.
To learn more about WCF Test Client, see WCF test client (WcfTestClient.exe).
Accessing WCF services in Visual Studio
Visual Studio simplifies the task of creating WCF clients, automatically generating a proxy and an endpoint for services that you add by using the Add Service Reference dialog box. All necessary configuration information is added to the app.config file. Most of the time, all that you have to do is instantiate the service in order to use it.
The Add Service Reference dialog box enables you to enter the address for a service or to search for a service that is defined in your solution. The dialog box returns a list of services and the operations provided by those services. It also enables you to define the namespace by which you will reference the services in code.
The Configure Service References dialog box enables you to customize the configuration for a service. You can change the address for a service, specify access level, asynchronous behavior, and message contract types, and configure type reuse.
How to: Select a service endpoint
In such a case, you can specify the endpointConfigurationName as a parameter to the constructor for a service reference.
Your computer might show different names or locations for some of the Visual Studio user interface elements in this article. You may be using a different edition of Visual Studio or different environment settings. For more information, see Personalize the IDE.
To select a service endpoint
Add a reference to a WCF service by right-clicking the project node in Solution Explorer and choosing Add service reference.
In the Code Editor, add a constructor for the service reference:
Replace ServiceReference with the namespace for the service reference and replace Service1Client with the name of the service.
An IntelliSense list displays that includes the overloads for the constructor. Select the endpointConfigurationName As String overload.
Following the overload, type = ConfigurationName, where ConfigurationName is the name of the endpoint that you want to use.
If you do not know the names of the available endpoints, you can find them in the app.config file.
To find the available endpoints for a WCF service
In Solution Explorer, right-click the app.config file for the project that contains the service reference and then click Open. The file appears in the Code Editor.
Search for the tag in the file.
Search underneath the tag for a tag that starts with .
If the service reference provides multiple endpoints, there will be two or more
Inside the tag, you will find a name=" SomeService " parameter (where SomeService represents an endpoint name). This is the name for the endpoint that can be passed to the endpointConfigurationName As String overload of a constructor for a service reference.
How to: Call a service method asynchronously
Most methods in Windows Communication Foundation (WCF) services may be called either synchronously or asynchronously. Calling a method asynchronously enables your application to continue to work while the method is being called when it operates over a slow connection.
By default, when a service reference is added to a project, it is configured to call methods synchronously. You can change the behavior to call methods asynchronously by changing a setting in the Configure Service Reference dialog box.
This option is set on a per-service basis. If one method for a service is called asynchronously, all methods must be called asynchronously.
Your computer might show different names or locations for some of the Visual Studio user interface elements in this article. You may be using a different edition of Visual Studio or different environment settings. For more information, see Personalize the IDE.
To call a service method asynchronously
In Solution Explorer, select the service reference.
On the Project menu, click Configure Service Reference.
In the Configure Service Reference dialog box, select the Generate asynchronous operations check box.
How to: Bind data returned by a service
You can bind data returned by a Windows Communication Foundation (WCF) service to a control just as you can bind any other data source to a control. When you add a reference to a WCF service, if the service contains composite types that return data, they are automatically added to the Data Sources window.
To bind a control to single data field returned by a WCF service
On the Data menu, click Show Data Sources.
The Data Sources window appears.
In the Data Sources window, expand the node for your service reference. Any composite types returned by the service display.
Expand a node for a type. The data fields for that type appear.
Select a field and click the drop-down arrow to display a list of controls that are available for the data type.
Click the type of control to which you want to bind.
Drag the field onto a form. The control is added to the form, together with a BindingSource component and a BindingNavigator component.
Repeat steps 4 though 6 for any other fields that you want to bind.
To bind a control to composite type returned by a WCF service
On the Data menu, select Show Data Sources. The Data Sources window appears.
In the Data Sources window, expand the node for your service reference. Any composite types returned by the service display.
Select a node for a type and click the drop-down arrow to display a list of available options.
Click either DataGridView to display the data in a grid or Details to display the data in individual controls.
Drag the node onto the form. The controls are added to the form, together with a BindingSource component and a BindingNavigator component.
How to: Configure a service to reuse existing types
To avoid this problem, types in referenced assemblies are shared by default. If you want to disable type sharing for one or more assemblies, you can do so in the Configure Service References dialog box.
To disable type sharing in a single assembly
In Solution Explorer, select the service reference.
On the Project menu, click Configure Service Reference.
In the Configure Service References dialog box, select Reuse types in specified referenced assemblies.
Select the check box for each assembly in which you want to enable type sharing. To disable type sharing for an assembly, leave the check box cleared.
To disable type sharing in all assemblies
In Solution Explorer, select the service reference.
On the Project menu, click Configure Service Reference.
In the Configure Service References dialog box, clear the Reuse types in referenced assemblies check box.
Данная статья открывает курс уроков по технологии WCF и рассчитана в первую очередь на новичков в программировании веб-сервисов.
Оглавление
1. Содержание урока
2. Создание проекта сервиса
В работе используется Visual Studio 2013 Professional, версия фреймворка 4.5.1. Для заметки: за некоторыми небольшими исключениями, разницы между версиями 4.0. и 4.5.1 нет, но использование последней предпочтительней, т.к. добавляет полезную функцию генерации WSDL одним файлом, но об этом ниже.
Итак, запускаем студию и создаем проект типа WCF Service Application в соответствующем разделе, называем его SampleService.
После создания проекта рассмотрим структуру решения в обозревателе решений:
1. IService1.cs содержит описание интерфейса сервиса, т.е. набор методов, которые наш сервис предоставляет.
2. Service1.svc состоит из двух частей — реализация сервиса (Service1.svc.cs) и разметка (Markup), доступная в меню по клику правой кнопкой мыши.
3. Web.config — конфигурация сервиса.
4. Папка App_Data нам пока не нужна — удаляем.
Для начала переименуем сервис и его интерфейс, придав им имена Calculator и ICalculator соответственно, а также изменим строчку в разметке сервиса (файл Calculator.svc):
Теперь опишем сам интерфейс нашего калькулятора. Объявим стандартные арифметические операции, такие как сложение (Addition), вычитание (Subtraction), умножение (Multiplication) и деление (Division). Также добавим дополнительный метод TestConnection, возвращающий строку. С помощью этого метода клиенты смогут проверить, что сервис функционирует, т.к. стандартного «пинга» WCF не предоставляет. Все методы интерфейса должны быть помечены атрибутом [OperationContract], иначе они не будут видны клиентам.
В итоге, интерфейс примет следующий вид:
Теперь реализуем интерфейс в классе сервиса:
Логика сервиса описана, теперь необходимо его разместить на хостинге.
3. Размещение сервиса
Сам по себе сервис представляет библиотеку (в нашем случае файл SampleService.dll), и для ее запуска в виде сервиса необходимо воспользоваться одним из предоставляемых WCF методов:
- 1. Хостинг на IIS.
- 2. Запуск в виде службы Windows.
- 3. Self hosting (сервис выполнен в виде консольного приложения, запускающего сервис).
Принципиального различия в этих методах нет, поэтому выберем простейший вариант — размещение на IIS. Для этого откроем конфигурацию проекта и выберем вкладку «Web». Параметры по умолчанию вы можете наблюдать у себя, а вот так выглядят настройки для нашего сервиса:
Раздел Start Action определяет, что произойдет при запуске проекта в студии:
- Current Page (по умолчанию) – запуск последней открытой страницы в браузере. У нашего сервиса пока нет настроенных url-адресов методов, поэтому этот вариант не подходит.
- Specific Page – запуск конкретной страницы.
- Start External program – запуск указанного исполняемого файла, который инициирует сервис, например, вызовет метод, нуждающийся в отладке.
- Start URL – открытие указанного в поле URL адреса в браузере.
- Don't open a page – ничего не открывать, но ждать запроса от стороннего приложения.
Во всех случаях сервис «запускается» в режиме отладки и ведет себя как обычное приложение в студии, т.е. реагирует на контрольные точки. Последний вариант удобен тем, что ничего не открывается в браузере, т.к. отладка с помощью браузера — не лучший вариант для WCF сервиса, но об этом ниже.
Под спойлером указан один из вариантов набора компонентов для работы сервисов.
После создания пула, назначьте его вашему приложению (Default Web Site > Lesson1 > Дополнительные параметры > Пул приложений).
Теперь немного о WSDL. По сути это XML, содержащая описание сервиса, его методов и точек подключения. Чтобы сторонние интеграторы смогли подключиться к вашему сервису, им нужна ссылка на WSDL. WSDL может быть разбита на части (по умолчанию) или быть одним файлом (см. выше). Важно помнить, что не все клиенты (например, SoapClient на PHP) могут работать с WSDL, разбитой на части, поэтому наличие однофайловой WSDL приветствуется.
4. Публикация сервиса
Под публикацией сервиса подразумевается его компиляция для дальнейшего выкладывания сборки на сервер. Рассмотрим на конкретном примере, выложив сервер на демонстрационный сервер компании.
Для начала, необходимо создать профиль публикации, для этого кликнем правой кнопкой мыши на имени проекта и выберем пункт Publish.
Мастер предложит нам несколько вариантов публикации, выберем Custom, профиль назовем Demo.
Затем выберем метод публикации File System и укажем путь, куда будет сохраняться наша сборка:
Проект готов к публикации, но желательно еще перейти к следующей вкладке (Settings) и отметить галочку «Delete all existing files prior to publish» (удалять все файлы перед публикацией) и выбрать конфигурацию.
Выполняем публикацию и смотрим, что получилось в итоге:
Чтобы разместить сервис на вашем сайте, скопируйте папку на сервер и подключите к IIS как приложение, как если бы это был обычный сайт (Default Web Site > Add Application. )
5. Вызов сервиса
Создадим в нашем решении еще один проект типа Console Application и назовем его TestClient. Назначим его исполняемым и добавим ссылку на сервис:
В открывшемся окне введем адрес локальный сервиса, по желанию укажем имя пространства имен и дополнительные настройки. Здесь же можно посмотреть, какие методы предоставляет наш сервис:
После создания ссылки на сервис, в проекте появится папка «Service References», в которой будет находиться сгенерированный сутидей клиент. Его код при желании вы можете посмотреть самостоятельно, надо только включить отображение скрытых файлов или перейти по F12 внутрь кода клиента.
Теперь напишем код для подключения к сервису и вызов арифметических операций, предоставляемых им:
Результат исполнения:
Переходим к другому способу вызова сервиса.
SoapUI
Запускаем программу и создаем новый проект. В поле адреса сервиса указываем на WSDL и вводим название проекта:
Как видим, SoapUI извлек интерфейсы сервиса и создал тестовые запросы для каждого из методов:
Осталось заполнить числовые значения и вызвать сервис:
Запрос-ответ после изменения пространства имен:
С остальными возможностями SoapUI предлагаем ознакомиться самостоятельно.
WebInvoke
WebInvoke – это возможность вызова метода WCF-сервисов «по ссылке», например с помощью Ajax.
Для начала, изменим конфигурацию:
Одного изменения конфигурации недостаточно, требуется также описать маппинги для методов интерфейса ICalculator. Пример для метода Addition:
Если бы, допустим, у нас был метод, принимающий строки, можно было бы указать аргументы через слеш, например так:
Но у нас числа, поэтому прописываем по аналогии атрибут WebInvoke в прочим методам, в итоге получаем следующий код:
После компиляции сервиса мы получаем возможность вызывать методы через URL, не самую приятную на вид, но все же.
Читайте также: