Разработка сервиса с применением Windows Communication Foundation (курсовая), страница 2
Описание файла
PDF-файл из архива "Разработка сервиса с применением Windows Communication Foundation (курсовая)", который расположен в категории "". Всё это находится в предмете "проектирование программного обеспечения автоматизированных систем" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "проектирование по автоматизированных систем" в общих файлах.
Просмотр PDF-файла онлайн
Текст 2 страницы из PDF
Контракт о данных описывает структуры данных, используемые службойдля взаимодействия с клиентами. Он описывает все данные, получаемые иотправляемые операциями службы.3. Контракт о сообщениях описывает формат сообщений протокола SOAP,что находит отражение в определениях сообщений на языках WSDL. Контракт о сообщениях позволяет точно контролировать состав заголовков ител SOAP сообщений.8Понятие контракта является ключевым при построении службы WCF. Хотяэто и не обязательно, подавляющее большинство приложений WCF будут начинаться с определения типов интерфейсов .NET, используемых для представлениянабора членов, которые поддерживаются данной службой WCF. В частности, интерфейсы, которые представляют контракт WCF, называются контрактами служб.Классы (или структуры), которые реализуют их, носят название типов служб.Контракты служб WCF оснащаются различными атрибутами, наиболее частоиспользуемыеизкоторыхопределенывпространствеименSystem.ServiceModel.
Когда члены контракта службы (методы в интерфейсе) содержат только простые типы данных (такие как числовые, булевские и строковые), полную службу WCF можно построить, используя одни только атрибуты[ServiceContract] и [OperationContract].Как только контракт (или набор контрактов) определен и реализован внутрибиблиотеки службы, следующий логический шаг состоит в построении агента хостинга для самой службы WCF. Как уже упоминалось, на выбор доступно множество возможных вариантов хостов, и все они должны указывать привязки, используемые удаленными клиентами для получения доступа к функциональности типаслужбы. Выбор из набора привязок – это область, которая отличает разработкуWCF от .NET Remoting и/или разработки веб-служб XML.
На выбор в WCF доступно множество возможных привязок, каждая из которых ориентирована наопределенные потребности. Если ни одна из готовых привязок не удовлетворяетсуществующим требованиям, можно создать собственную привязку, расширивтип CustomBinding. Привязка WCF может описывать следующие характеристики:1. Транспортный уровень, используемый для передачи данных (HTTP, MSMQ,именованные каналы и TCP);2. Каналы, используемые транспортом (однонаправленные, запрос-ответ идуплексные);3.
Механизм кодирования, используемый для работы с данными (XML и двоичный);4. Любые поддерживаемые протоколы веб-служб (если разрешены привязкой), такие как WS-Security, WS-Transactions, WS-Reliability и т.д.9Как только контракты и привязки установлены, финальный элемент мозаики состоит в указании адреса для службы WCF. Это важно, поскольку удаленныеклиенты не смогут взаимодействовать с удаленными типами, если им не удастсянайти их.
Подобно большинству аспектов WCF, адрес может быть жестко закодирован в сборке (с использованием типа System.Uri) или вынесен в файл *.config.В любом случае точный формат адреса WCF отличается в зависимости отвыбранной привязки (на основе HTTP, именованных каналов, TCP или MSMQ).На самом высоком уровне адреса WCF могут указывать перечисленные нижеединицы информации.1. Scheme. Транспортный протокол (HTTP и т.п.).2. MachineName. Полностью квалифицированное доменное имя машины.3.
Port. Во многих случаях не обязательный параметр. Например, привязкаHTTP по умолчанию использует порт 80.4. Path. Путь к службе WCFЭта информация может быть представлена следующим обобщенным шаблоном (значение Port необязательно, поскольку некоторые привязки его не используют):Scheme://<MachineName>[:Port]/Path101.4. АтрибутыВ WCF атрибуты применяются ради упрощения и ускорения процесса написания служб.
При определении контракта пишется класс, который делает нечтополезное, после чего он снабжается атрибутами WCF. Атрибут ServiceContractпомечает класс, как контракт. В терминах языка WSDL ServiceContract определяет тип порта PortType. Атрибут OperationContract определяет методы класса, которые можно вызывать через интерфейс службы. Одновременно он определяет,какие сообщения можно передать этим методам и получить от них.Атрибут ServiceContract.Чтобы интерфейс CLR участвовал в службах, предоставленных WCF, ондолжен быть оснащен атрибутом ServiceContract. Подобно многим другим атрибутам .NET, тип ServiceContractAttribute поддерживает набор свойств для дальнейшего прояснения его назначения.
Два свойства – Name и NameSpace – могутбыть установлены для управления именем типа службы и именем пространстваимен XML, определяющим тип службы. Если используется привязка, специфичная для веб-служб, эти значения применяются для определения элементов <portType> связанного документа WSDL.СвойствоCallbackContractConfigurationNameProtectionLevelSessionModeНазначениеУстанавливает функциональность обратного вызова для двустороннего обмена сообщениями.Это имя используется для нахождения элемента службы вконфигурационном файле приложения.
По умолчанию представляет собой имя класса, реализующего службу.Позволяет указать степень, до которой привязка контрактатребует шифрования, цифровых подписей или того и другогодля конечных точек, представленных контрактом.Используется для установки разрешения сеанса, запрета сеанса или обязательности сеанса для данного контракта службы.Таблица 1.1. Назначения свойств атрибута ServiceContract.11Атрибут OperationContract.Методы, которые планируется использовать внутри WCF, должны бытьоснащены атрибутом OperationContract, который также может быть сконфигурирован с помощью различных именованных свойств.СвойствоНазначениеAsyncPatternУказывает, реализована ли операция асинхронно с использованием пары методов Begin/End службы. Это позволяет службе передавать обработку другому потоку серверной стороны.IsInitiatingУказывает, может ли операция быть начальной операциейсеансаIsOneWayУказывает, состоит ли операция только из одного входногосообщения (без какого-либо ассоциированного вывода)IsTerminatingУказывает, должна ли исполняющая среда WCF пытаться завершить текущий сеанс после выполнения операцииТаблица 1.2.
Назначения свойств атрибута OperationContract.122. РАЗРАБОТКА WCF ПРИЛОЖЕНИЯВ данной работе предложена реализация сервиса хеширования по различным алгоритмам (MD5, SHA-1, SHA-256, SHA-512) с применением WCF иMicrosoft Visual Studio 2010. Для демонстрации работы механизма передачи событий сервиса на клиент реализовано уведомление клиентов в режиме реального времени об общем числе клиентов, использующих сервис.2.1. Создание проектаСоздадим библиотеку классов «CryptService», в которой определим самуслужбу, консольное приложение «ConsoleHost», которое будем использовать вкачестве хоста, и приложение-клиент Windows Forms «Client».Рис.
2.1. Создание библиотеки классов CryptService.dll.13Рис. 2.2. Добавление консольного приложения ConsoleHost.Рис. 2.3. Добавление приложения клиента Client.142.2. Создание контрактаДобавим в проект файл IStringCrypt.cs, в котором определим два интерфейса IStringCrypt и IClientCallback, образующие в совокупности контракт будущегоWCF сервиса:using System.ServiceModel;namespace CryptService{[ServiceContract(SessionMode = SessionMode.Required,CallbackContract = typeof(IClientCallback))]public interface IStringCrypt{[OperationContract]string md5(string str);[OperationContract]string sha1(string str);[OperationContract]string sha256(string str);[OperationContract]string sha512(string str);[OperationContract(IsOneWay = true)]void join();[OperationContract(IsOneWay = true)]void leave();}public interface IClientCallback{[OperationContract(IsOneWay = true)]void count(int count);}}Необходимо сообщить WCF, что это наш контракт. Делаем это путем добавления атрибутов (ServiceContract и OperationContract).
Кроме того, нужно добавить ссылку на System.ServiceModel.15Рис. 2.4. Добавление ссылки на System.ServiceModel.2.3. Реализация службыДобавим файл StringCrypt.cs и напишем в нём реализацию созданных ранееинтерфейсов:usingusingusingusingusingSystem;System.Text;System.Security.Cryptography;System.ServiceModel;System.Collections.Generic;namespace CryptService{[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]public class StringCrypt : IStringCrypt{public static int count = 0;private static List<User> users = new List<User>();private User user;class User16{public IClientCallback callback;public User(IClientCallback callback){this.callback = callback;}}public string md5(string str){MD5 md5Hasher = MD5.Create();byte[] buffer = Encoding.Default.GetBytes(str);byte[] data = md5Hasher.ComputeHash(buffer);return bytes2string(data);}public string sha1(string str){SHA1 sha1Hasher = SHA1.Create();byte[] buffer = Encoding.Default.GetBytes(str);byte[] data = sha1Hasher.ComputeHash(buffer);return bytes2string(data);}public string sha256(string str){SHA256 sha256Hasher = SHA256.Create();byte[] buffer = Encoding.Default.GetBytes(str);byte[] data = sha256Hasher.ComputeHash(buffer);return bytes2string(data);}public string sha512(string str){SHA512 sha512Hasher = SHA512.Create();byte[] buffer = Encoding.Default.GetBytes(str);byte[] data = sha512Hasher.ComputeHash(buffer);return bytes2string(data);}17public void join(){count++;IClientCallback callback = OperationContext.Current.GetCallbackChannel<IClientCallback>();User u = new User(callback);users.Add(u);user = u;foreach (User x in users)x.callback.count(count);}public void leave(){count--;users.Remove(user);foreach (User x in users)x.callback.count(count);}private string bytes2string(byte[] data){StringBuilder sBuilder = new StringBuilder();for (int i = 0; i < data.Length; i++)sBuilder.Append(data[i].ToString("x2"));return sBuilder.ToString();}}}2.4.