- •ВВЕДЕНИЕ
- •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. Приложение клиента
- •ЗАКЛЮЧЕНИЕ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК
21
2.7. Приложение клиента
Перейдём от написания сервиса к написанию приложения клиента. Сначала необходимо создать прокси-класс, который будет находиться между нашим клиентом и службой. Один из способов создания прокси-класса – воспользоваться генератором прокси svcutil.exe. Для этого необходимо ввести в командной строке Visual Studio следующую команду, находясь в папке расположения «Client»:
> svcutil http://localhost:8080/ /o:ServiceProxy.cs /config:App.Config /n:*,Client
Эта команда сгенерирует два файла: прокси службы и файл конфигурации приложения, которые необходимо включить в проект.
Когда мы запустили svcutil.exe мы передали ему в качестве первого аргумента место расположения нашей службы, как указано в хосте. Это и есть базовый адрес. Вторым аргументом является прокси. Третий аргумент указывает, что мы также хотим обновить конфигурацию приложения, а если она не доступна, создать её. Последний аргумент – пространство имён для прокси.
Сам код приложения клиента довольно прост:
using System;
using System.Collections.Generic; using System.ComponentModel; using System.Data;
using System.Drawing; using System.Text;
using System.Windows.Forms; using System.ServiceModel;
namespace Client
{
public partial class ClientForm : Form
{
const int MD5 |
= 0; |
|
const int SHA1 |
= 1; |
|
const int |
SHA256 = 2; |
|
const int |
SHA512 = 3; |
StringCryptClient client;
22
public class CallbackHandler : IStringCryptCallback
{
ClientForm form;
public CallbackHandler(ClientForm form) { this.form = form;
}
public void count(int count) {
form.infoLabel.Text = "Общее число клиентов " + count;
}
}
public ClientForm() { InitializeComponent(); algComboBox.SelectedIndex = MD5;
try {
InstanceContext instanceContext =
new InstanceContext(new CallbackHandler(this)); client = new StringCryptClient(instanceContext); client.join();
}
catch (Exception e) { MessageBox.Show(e.Message); return;
}
}
private void hashRefresh()
{
const string defaultText = ""; string str = strTextBox.Text;
if (string.IsNullOrEmpty(str)) { hashTextBox.Text = defaultText; return;
}
string hash;
try {
switch (algComboBox.SelectedIndex) {
case MD5: hash = client.md5(str); break; case SHA1: hash = client.sha1(str); break;
23
case SHA256: hash = client.sha256(str); break; case SHA512: hash = client.sha512(str); break; default: hashTextBox.Text = defaultText; return;
}
}
catch (Exception e) { MessageBox.Show(e.Message); hashTextBox.Text = defaultText; return;
}
hashTextBox.Text = hash;
}
private void strTextBox_TextChanged(object sender, EventArgs e) { hashRefresh();
}
private void algComboBox_SelectedIndexChanged (object sender, EventArgs e) {
hashRefresh();
}
private void ClientForm_FormClosed (object sender, FormClosedEventArgs e) {
client.leave();
client.Close();
}
}
}
24
Рис. 2.6. Внешний вид приложения WCF клиента.