Лабораторная работа 1 (ПКРПСиБД LAB1 Буренков С.А.)

Посмотреть архив целиком

Национальный исследовательский университет

«Московский энергетический институт»













Лабораторная работа №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 определяет четыре разновидности контрактов.

  1. Контракты служб описывают операции, которые могут выполняться клиентом со службой.

  2. Контракты данных определяют, какие типы данных принимаются и передаются службой.

  3. Контракты ошибок определяют, какие ошибки инициируются службой, как служба обрабатывает их и передает своим клиентам.

  4. Контракты сообщений позволяют службам напрямую взаимодействовать с сообщениями.

WSDL – язык описания web-сервисов и доступа к ним, основанный на XML.

О разработанном приложении

При разработке приложения с применением Windows Communication Foundation была выбрана задача одномерной минимизации (поиск локального минимума методом дихотомии). Разработанный сервис получает исходные данные от клиента, производит поиск локального минимума унимодальной функции и отправляет результат обратно на клиент. Клиент отвечает за получение исходных данных и отображение результата. В процессе решения сервер посылает клиенту информацию об уже проделанной работе, которая отображается на клиентской стороне в виде заполняющейся полосы (progressBar).

Ограничение. В работе рассматривается минимизация полиномиальных функций. Указание отрезка, на котором функция унимодальна, возлагается на пользователя.

Демонстрация работы программы. Например, найдем минимум функции на отрезке [1; 4] с точностью .

Рис. 1. График функции .



Рис. 2. Запущенный сервис и несколько клиентов

Приложение

  1. Интерфейс сервиса [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; }

}

}


  1. Реализация сервиса [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<IDichotomyServiceCallback>();

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;

}

}

}


  1. [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();

}

}

}



  1. Вызов сервиса из клиента [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;

}





Источники

  1. Джувел Лёве. Создание служб Windows Communication Foundation. – СПб.: Питер, 2008. – 592 с.

  2. Стив Резник, Ричард Крейн, Крис Боуэн. Основы Windows Communication Foundation для .NET Framework 3.5. – М.: ДМК Пресс, 2008. – 480 с.

  3. Windows Сomunication Foundation – универсальная, легкая в освоении технология написания распределенных приложений - [Электронный ресурс] - http://www.techdays.ru/videos/1102.html


Случайные файлы

Файл
64196.rtf
2986-1.rtf
91572.rtf
135330.doc
18311.rtf




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.