- •ВВЕДЕНИЕ
- •1. АРХИТЕКТУРА ПРИЛОЖЕНИЙ WCF
- •1.1. Основы WCF
- •1.2. Конечные точки
- •1.3. Контракты
- •1.4. Атрибуты
- •2. РАЗРАБОТКА WCF ПРИЛОЖЕНИЯ
- •2.1. Создание проекта
- •2.2. Создание контракта
- •2.3. Реализация службы
- •2.4. Приложение службы
- •2.5. Конфигурация службы
- •2.6. Получение WSDL сервиса
- •2.7. Приложение клиента
- •ЗАКЛЮЧЕНИЕ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК
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);
}