ПКРПСиБД LAB1 Буренков С.А. (548665)
Текст из файла
Национальный исследовательский университет
«Московский энергетический институт»
Лабораторная работа №1
По курсу «Проектирование крупных распределенных программных систем и баз данных »
Разработка сервиса с применением WCF (WCF Service Application)
Выполнил студент
группы А-13-08
Буренков Сергей
Проверил
доц., к.т.н. Куриленко
Иван Евгеньевич
Москва, 2012 год
Оглавление
Цель работы 3
Краткая теоретическая справка 3
О разработанном приложении 4
Приложение 5
Источники 8
Цель работы
Научиться разрабатывать сервисные приложения с применением WCF и MS Visual Studio 2010.
Краткая теоретическая справка
Windows Communication Foundation (WCF) – инструментальный пакет для разработки и развертывания служб в системе Windows. Платформа WCF является частью .NET 3.0.
Службой (service) называется функциональный модуль, доступный извне. В этом отношении службы являются очередной ступенью эволюционного пути «функции-объекты-компоненты-службы». Термином SO (Service-orientation) обозначается абстрактный набор принципов и оптимальных методов построения приложений, ориентированных на работу со службами. В основе своей служба – это множество оконечных точек (endpoints), которые предоставляют клиентам некие полезные возможности. Оконечная точка – это сетевой ресурс, которому можно посылать сообщения.
Служебно-ориентированные приложения SOA (Service-Oriented Applications) объединяют службы в единую логическую прикладную модель. Задействованные службы могут быть локальными или удаленными, они могут разрабатываться разными сторонами с применением любых технологий, их версии могут изменяться независимо друг от друга, даже одновременность их выполнения не является обязательным условием. Внутри служб встречаются всевозможные комбинации языков, технологий, платформ, версий и библиотек.
Привязка (bindings) представляет собой логически согласованный, фиксированный набор настроек, относящихся к транспортному протоколу, кодированию сообщений, коммуникационной схеме, надежности, безопасности, распространению транзакций и совместимости.
Клиентом службы называется сторона, пользующаяся ее функциональностью. В роли клиента может оказаться буквально все, что угодно – класс Windows Forms, страница ASP.NET, другая служба. Клиенты и службы взаимодействуют друг с другом, отправляя и принимая сообщения. В WCF сообщения передаются в формате SOAP.
Чтобы клиент мог передать службе осмысленную информацию, он должен знать АПК: адрес, привязку и контракт.
-
Адрес определяет, куда следует отправлять сообщения, чтобы оконечная точка их получила.
-
Привязка определяет канал для коммуникаций с оконечной точкой. Канал состоит из нескольких элементов привязки (binding element). На самом нижнем уровне элемент привязки – это транспортный механизм, обеспечивающий доставку сообщений по сети.
-
Контракт определяет набор функций, предоставляемых оконечной точкой, то есть операции, которые она может выполнять, и форматы этих операций.
WCF определяет четыре разновидности контрактов.
-
Контракты служб описывают операции, которые могут выполняться клиентом со службой.
-
Контракты данных определяют, какие типы данных принимаются и передаются службой.
-
Контракты ошибок определяют, какие ошибки инициируются службой, как служба обрабатывает их и передает своим клиентам.
-
Контракты сообщений позволяют службам напрямую взаимодействовать с сообщениями.
WSDL – язык описания web-сервисов и доступа к ним, основанный на XML.
О разработанном приложении
При разработке приложения с применением Windows Communication Foundation была выбрана задача одномерной минимизации (поиск локального минимума методом дихотомии). Разработанный сервис получает исходные данные от клиента, производит поиск локального минимума унимодальной функции и отправляет результат обратно на клиент. Клиент отвечает за получение исходных данных и отображение результата. В процессе решения сервер посылает клиенту информацию об уже проделанной работе, которая отображается на клиентской стороне в виде заполняющейся полосы (progressBar).
Ограничение. В работе рассматривается минимизация полиномиальных функций. Указание отрезка, на котором функция унимодальна, возлагается на пользователя.
Демонстрация работы программы. Например, найдем минимум функции на отрезке [1; 4] с точностью
.
Рис. 1. График функции .
Рис. 2. Запущенный сервис и несколько клиентов
Приложение
-
Интерфейс сервиса [IDichotomyService.cs]
namespace DichotomySolution
{
[ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(IDichotomyServiceCallback))]
public interface IDichotomyService
{
[OperationContract(IsOneWay = true)]
void runDichotomy(Mydata msg);
}
public interface IDichotomyServiceCallback
{
[OperationContract(IsOneWay = true)]
void progressUpdate(double pers);
[OperationContract(IsOneWay = true)]
void Result(double result);
}
[DataContract]
public class Mydata
{
[DataMember]
public double[] arr { get; set; }
[DataMember]
public double eps { get; set; }
[DataMember]
public double leftBorder { get; set; }
[DataMember]
public double rightBorder { get; set; }
}
}
-
Реализация сервиса [DichotomyService.cs]
namespace DichotomySolution
{
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class DichotomyService : IDichotomyService
{
public IDichotomyServiceCallback callback = null;
public void runDichotomy(Mydata msg)
{
if(callback == null)
callback = OperationContext.Current.GetCallbackChannel
double a = msg.leftBorder;
double b = msg.rightBorder;
double eps = msg.eps;
double delta = eps / 3;
double x1, x2;
// Поиск числа необходимых итераций
int numberOfIterations = (int)(Math.Log(b - a - delta) / Math.Log(2) - Math.Log(eps - delta) / Math.Log(2)) + 1;
// Выполнение итерационного процесса
for (int i = 0; i < numberOfIterations; i++)
{
x1 = (a + b - delta) / 2;
x2 = (a + b + delta) / 2;
if (f(msg.arr, x1) < f(msg.arr, x2))
b = x2;
else
a = x1;
// Послать данные о состоянии вычисления на клиент
callback.progressUpdate(i / numberOfIterations);
}
callback.progressUpdate(1);
// Отправка результатов вычислений
callback.Result(a);
// Сообщение о выполненной работе
Console.WriteLine("Minimum of function was founded with accuracy = {0}", eps);
return;
}
double f(double[] arr, double x)
{
double result = 0.0;
for (int i = 0; i < arr.Length; i++)
result += arr[i] * Math.Pow(x, i);
return result;
}
}
}
-
[Program.cs]
namespace DichotomySolution
{
class Program
{
const string URI = "http://localhost:10020/";
static void Main(string[] args)
{
// Тип сервиса
Type serviceType = typeof(DichotomyService);
// Адрес сервиса
Uri serviceUri = new Uri(URI);
ServiceHost host = new ServiceHost(serviceType, serviceUri);
host.Open();
Console.WriteLine("Dichotomy service is running now");
Console.ReadLine();
Console.WriteLine("Dichotomy service is closed");
host.Close();
}
}
}
-
Вызов сервиса из клиента [Form1.cs]
…
using DichotomyClient.DichotomyService;
…
private void button3_Click(object sender, EventArgs e)
{
progressBar1.Visible = true;
// Формирование сообщения
Mydata msg = new Mydata();
msg.arr = arr;
msg.eps = Convert.ToDouble(textBox5.Text);
msg.leftBorder = Convert.ToDouble(textBox3.Text);
msg.rightBorder = Convert.ToDouble(textBox4.Text);
client.runDichotomy(msg);
}
public void progressUpdate(double pers)
{
progressBar1.Value = (int) (pers * 100);
return;
}
public void Result(double res)
{
textBox6.Text = Convert.ToString(res);
return;
}
Источники
-
Джувел Лёве. Создание служб Windows Communication Foundation. – СПб.: Питер, 2008. – 592 с.
-
Стив Резник, Ричард Крейн, Крис Боуэн. Основы Windows Communication Foundation для .NET Framework 3.5. – М.: ДМК Пресс, 2008. – 480 с.
-
Windows Сomunication Foundation – универсальная, легкая в освоении технология написания распределенных приложений - [Электронный ресурс] - http://www.techdays.ru/videos/1102.html
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.