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

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 клиента.