Разработка сервиса с применением Windows Communication Foundation (курсовая), страница 3
Описание файла
PDF-файл из архива "Разработка сервиса с применением Windows Communication Foundation (курсовая)", который расположен в категории "". Всё это находится в предмете "проектирование программного обеспечения автоматизированных систем" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "проектирование по автоматизированных систем" в общих файлах.
Просмотр PDF-файла онлайн
Текст 3 страницы из PDF
Приложение службыТеперь, когда контракт и его реализация полностью написаны, можно переходить к написанию приложения службы (файл Program.cs). В нашем случае этобудет просто консольное приложение, запуск которого запускает службу по адресу http://localhost:8080/.using System;18usingusingusingusingSystem.Text;System.ServiceModel;CryptService;System.ServiceModel.Description;namespace ConsoleHost{class Program{const string URI = "http://localhost:8080/";static void Main(string[] args){// Тип сервисаType serviceType = typeof(StringCrypt);// URI сервисаUri serviceUri = new Uri(URI);ServiceHost host = new ServiceHost(serviceType, serviceUri);host.Open();Console.ForegroundColor = ConsoleColor.Green;foreach (Uri uri in host.BaseAddresses)Console.WriteLine(uri.ToString());Console.ResetColor();Console.ForegroundColor = ConsoleColor.DarkGray;Console.Write("Нажмите ENTER, чтобы закрыть хост");Console.ReadLine();host.Close();}}}2.5.
Конфигурация службыНаконец, осталось правильно сконфигурировать наш сервис. Напомню, чтопланируется реализация механизма уведомления клиентов. То есть общение клиентов и сервиса должно быть двусторонним, поэтому в качестве типа привязкивозьмём wsDualHttpBinding.Приведём содержимое файла конфигурации нашего сервиса App.config:<?xml version="1.0" encoding="utf-8" ?><configuration>19<system.serviceModel><protocolMapping><add scheme="http" binding="wsDualHttpBinding" /></protocolMapping><behaviors><serviceBehaviors><behavior><serviceMetadata httpGetEnabled="True"/><serviceDebug includeExceptionDetailInFaults="False" /></behavior></serviceBehaviors></behaviors></system.serviceModel></configuration>Рис. 2.5.
Внешний вид приложения для запуска службы.202.6. Получение WSDL сервисаТеперь можно запустить консольное приложение-хост (в противном случае,конечные точки будут недоступны) и перейти к URI службы http://localhost:8080/Вы увидите экран со ссылкой на WSDL сервиса http://localhost:8080/?wsdl.WSDL (англ. Web Services Description Language) – язык описания вебсервисов и доступа к ним, основанный на языке XML. Каждый документ WSDLможно разбить на следующие логические части:1. определение типов данных (types) – определение вида отправляемых и получаемых сервисом XML сообщений;2. элементы данных (message) – сообщения, используемые сервисом;3.
абстрактные операции – список операций, которые могут быть выполненыс сообщениями;4. тип порта (PortType) – именованный набор абстрактных операций и абстрактных сообщений. Оконечная точка службы реализует некий тип порта,группирующий взаимосвязанные операции.5. служба определяет набор взаимосвязанных портов;6. связывание сервисов (binding) – способ, которым сообщение будет доставлено.Поскольку контракты описываются на языке WSDL, а программа обычноработает с типами CLR, возникает необходимость отобразить одну систему типовна другую. В WCF эта задача решается в три этапа. Сначала при написании кодаслужбы вы снабжаете класс определенными в WCF атрибутами [ServiceContract],[OperationContract], [FaultContract], [MessageContract] и [DataContract]. Затем принаписании клиентского кода вы запрашиваете у службы детали контракта.
Этоделается с помощью Visual Studio или утилиты svcutil.exe, которая вызывает инфраструктурную оконечную точку службы, возвращающую метаданные, необходимые для генерации WSDL документа, получая их от атрибутов. Наконец, наэтапе исполнения, когда клиент вызывает какой-то метод, определенный в интерфейсе службы, WCF сериализует типы CLR и вызов метода в формат XML и посылает сообщение в сеть в соответствии с привязкой и схемой кодирования, согласованным посредством WSDL.212.7. Приложение клиентаПерейдём от написания сервиса к написанию приложения клиента.
Сначаланеобходимо создать прокси-класс, который будет находиться между нашим клиентом и службой. Один из способов создания прокси-класса – воспользоватьсягенератором прокси svcutil.exe. Для этого необходимо ввести в командной строкеVisual Studio следующую команду, находясь в папке расположения «Client»:> svcutil http://localhost:8080/ /o:ServiceProxy.cs /config:App.Config /n:*,ClientЭта команда сгенерирует два файла: прокси службы и файл конфигурацииприложения, которые необходимо включить в проект.Когда мы запустили svcutil.exe мы передали ему в качестве первого аргумента место расположения нашей службы, как указано в хосте.
Это и есть базовый адрес. Вторым аргументом является прокси. Третий аргумент указывает, чтомы также хотим обновить конфигурацию приложения, а если она не доступна, создать её. Последний аргумент – пространство имён для прокси.Сам код приложения клиента довольно прост:usingusingusingusingusingusingusingusingSystem;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Text;System.Windows.Forms;System.ServiceModel;namespace Client{public partial class{const int MD5const int SHA1const int SHA256const int SHA512ClientForm : Form====0;1;2;3;StringCryptClient client;22public class CallbackHandler : IStringCryptCallback{ClientForm form;public CallbackHandler(ClientForm form) {this.form = form;}public void count(int count) {form.infoLabel.Text = "Общее число клиентов " + count;}}public ClientForm() {InitializeComponent();algComboBox.SelectedIndex = MD5;try {InstanceContext instanceContext =new InstanceContext(new CallbackHandler(this));client = new StringCryptClient(instanceContext);client.join();}catch (Exception e) {MessageBox.Show(e.Message); return;}}private void hashRefresh(){const string defaultText = "";string str = strTextBox.Text;if (string.IsNullOrEmpty(str)) {hashTextBox.Text = defaultText; return;}string hash;try {switch (algComboBox.SelectedIndex) {case MD5: hash = client.md5(str); break;case SHA1: hash = client.sha1(str); break;23case SHA256: hash = client.sha256(str); break;case SHA512: hash = client.sha512(str); break;default: hashTextBox.Text = defaultText; return;}}catch (Exception e) {MessageBox.Show(e.Message);hashTextBox.Text = defaultText;return;}hashTextBox.Text = hash;}private void strTextBox_TextChanged(object sender, EventArgs e) {hashRefresh();}private void algComboBox_SelectedIndexChanged(object sender, EventArgs e) {hashRefresh();}private void ClientForm_FormClosed(object sender, FormClosedEventArgs e) {client.leave();client.Close();}}}24Рис.
2.6. Внешний вид приложения WCF клиента.25ЗАКЛЮЧЕНИЕВ данной работе мною были разработаны клиент и сервис WindowsCommunication Foundation. Не смотря на то, что создание простых web-служб спомощью WCF не представляет особого труда, WCF унифицирует модель создания служб и предоставляет программисту одинаковые механизмы по созданиюслужб, передающих сообщения в формате SOAP через HTTP, или служб, взаимодействующих по бинарному протоколу. Более того, WCF активно использует всепередовые решения, которые накапливались с 2001 года, когда появилась перваяреализация .NET Framework, а соответственно и web-служб.
Так, за последние 5лет появилось множество концепций и реализаций, решающих различные проблемы, которые возникали при передаче данных, связанных с безопасностью илипротоколами. Теперь все эти реализации были собраны вместе и стали доступныдля программиста максимально удобным способом.26БИБЛИОГРАФИЧЕСКИЙ СПИСОК1.
Герберт Шилдт. C# 4.0: полное руководство – М.: «Вильямс», 2010. – 1056 с.2. Дж. Лёве. Создание служб Windows Communication Foundation. – Спб.: Питер,2008. – 592 с.: ил.3. Пабло Сибраро, Курт Клайс, Фабио Коccолино, Йохан Грабнер WCF 4: Windows Communication Foundation и .NET 4 для профессионалов – М.:«Диалектика», 2011. – 464 с.4. Слинкина А.
А. Основы Windows Communication Foundation для .NETFramework 3.5: Пер. с англ. – М.: ДМК Пресс, 2008. – 480 с.: ил.27СОДЕРЖАНИЕВВЕДЕНИЕ ............................................................................................................ 21. АРХИТЕКТУРА ПРИЛОЖЕНИЙ WCF ......................................................... 51.1. Основы WCF ............................................................................................... 51.2. Конечные точки .......................................................................................... 61.3. Контракты ................................................................................................... 71.4. Атрибуты...................................................................................................
102. РАЗРАБОТКА WCF ПРИЛОЖЕНИЯ........................................................... 122.1. Создание проекта ..................................................................................... 122.2. Создание контракта.................................................................................. 142.3. Реализация службы .................................................................................. 152.4. Приложение службы ................................................................................ 172.5.
Конфигурация службы ............................................................................ 182.6. Получение WSDL сервиса....................................................................... 202.7. Приложение клиента................................................................................ 21ЗАКЛЮЧЕНИЕ ................................................................................................... 25БИБЛИОГРАФИЧЕСКИЙ СПИСОК ............................................................... 26.