Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разработка сервиса с применением Windows Communication Foundation (курсовая).pdf
Скачиваний:
88
Добавлен:
28.06.2014
Размер:
621.97 Кб
Скачать

12

2.РАЗРАБОТКА 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.

14

2.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 и напишем в нём реализацию созданных ранее интерфейсов:

using System; using System.Text;

using System.Security.Cryptography; using System.ServiceModel;

using 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 User

16

{

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);

}