Модификация приложения WCF : приложение-клиент для WCF -службы
Для начала изменим имя сервиса. Выделим файл Service 1. svc в обозревателе решений и перейдём к его коду (правая кнопка мыши -> Перейти к коду либо F 7). Код файла содержит классы для работы с параметрами сервиса, теми самыми, что были доступны в клиенте WCF. Найдём в коде строку:
// ПРИМЕЧАНИЕ. Команду "Переименовать" в меню "Рефакторинг" можно использовать для одновременного изменения имени класса "Service1" в коде, SVC-файле и файле конфигурации.
public class Service1 : IService1
{
Выделим имя класса (слово) Service 1 и далее ПКМ -> во всплывающем меню: Рефакторинг -> Переименовать (или F 2):
Рис. 3. 1. Переименование сервиса
Вводим в открывшемся окне имя LWP 16 Service, жмём ОК, в следующем окне Применить:
Рис. 3. 2. Переименование сервиса: Переименовать
Рис. 3. 2. Переименование сервиса: Просмотр изменений - Переименование
То же самое проделаем для имени интерфейса (IService 1). Введём новое имя ILWP 16 Service. И переименуем имя файла сервиса в LWP 16 Service:
Слегка изменим сервис. Откроем код класса интерфейса сервиса (файл ILWP 16 Service . cs) и найдём:
[OperationContract]
string GetData(int value);
Изменим так:
[OperationContract]
string GetInt(int value);
[OperationContract]
string GetString(string value);
Обратим внимание на атрибуты [ OperationContract ] в приведенном выше коде. Эти атрибуты обязательны для любого метода, предоставляемого службой. Параметры которым обладает «контракт»:
|
|
IsInitiating – если true тогда связь с сервисом и сессия начинается, создается объект реализации на сервисе и запускается его конструктор. IsOneWay – если true данный метод ничего не возвращает и только в одну сторону. IsTerminating – значение true этого параметра приводит к тому, что по окончанию его обработки на сервисе связь с клиентом прерывается и сессия закрывается, т.е. последующие обращения к сервису приведут к ошибкам. Выглядит это так:
[OperationContract(IsInitiating = true, IsOneWay = false, IsTerminating = false)]
Для [ServiceContract]:
[ServiceContract(SessionMode = SessionMode.Required)]
Параметр SessionMode отвечатет за то, разрешены, запрещены или требуются ли сеансы.
В файле LWP 16 Service . svc . cs найдём:
public class LWP16Service : ILWP16Service
{
public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}
Заменим на:
public string GetInt(int value)
{
return string.Format("Вы ввели число: {0}", value);
}
public string GetString(string value)
{
return string.Format("Вы ввели строку: {0}", value);
}
Сервис можно компилировать по конфигурации Release (Построение -> Построить решение, либо F 6).
Осталось добавить клиентское приложение. Интегрируем такое приложение непосредственно в текущее решение. Для этого выполним следующие действия: Файл -> Создать -> Проект. В окне открывшемся окне «Создать проект», в поле Решение, выберем: Добавить в решение. В качестве проекта выберем Приложение Windows Forms. Имя будет: LWP 16 WCFClient. Жмём ОК. Получим следующее:
|
|
Рис. 3. 3. Обозреватель решений: содержимое решения, состоящего из двух проектов
Теперь интегрируем службу LWP 16 Service . svc в форму. Для этого в обозревателе решений выделим имя проекта (LWP 16 WCFClient), далее жмём правую кнопку мыши -> Добавить ссылку на службу...:
В открывшемся окне жмём на Найти, далее Службы решения. Наша служба автоматически добавится в список. В поле Пространство имён вводим: LWP16ServiceReference:
Рис. 3. 4. Добавить ссылку на службу: добавление службы из нашего решения в другой проект этого же решения
Жмём ОК. И откроем конструктор формы клиентского проекта2.
ПРИМЕЧАНИЕ № 2: Для перехода на визуальное представление формы, необходимо двойным нажатием в обозревателе решений нажать на значок формы ( ) или выбрать вкладку на панели вкладок с именем <имя формы>. cs [Конструктор].
На форме клиентского проекта Form 1 расставим два текстовых поля, под ними одну кнопку и ещё ниже два статических поля Label. Все имена и свойства добавленных элементов оставим без изменений. Задаём следующие параметры самой формы на панели Свойства:
|
|
( Name ) | изменим с Form 1. cs 3 на LWP 16 Main |
^ Поменяем внутреннее имя формы.
Text | изменим с Form 1 на Клиент для службы WCF ( C #) |
^ Поменяем заголовок формы (то, что отображается в шапке приложения слева).
MaximizeBox | изменим с True на False |
^ Уберём кнопку Развернуть.
Icon | изменим изображение (иконку) приложения |
^ Необходим файл значка *. ico.
FormBorderStyle | > изменим с Sizable на FixedDialog |
^ Сделаем окно «неизменяем» по размерам.
Size | изменим со значений 290; 290 на 35 0; 2 00 |
^ Поменяем размер формы.
ПРИМЕЧАНИЕ № 3: Для того, чтобы поменять имя файла нашей формы, необходимо выполнить следующее: выделить в обозревателе решений значок формы ( ) и нажать правую кнопку мыши, затем выбрать Переименовать. Ввести необходимое новое имя СОХРАНЯЯ расширение *. cs. После смены имени, автоматически поменяются имена проассоциированных непосредственно с формой файлов:
Форма будет выглядеть примерно так:
Рис. 3. 5. Модифицированная форма приложения и расстановка необходимых элементов управления
Кнопку и текстовые поля TextBox растянем до границ формы.
|
|
Дважды щёлкнем по кнопке на форме, тем самым создав событие Click. Впишем код:
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "Ведите число") { textBox1.Text = "0"; }
LWP16ServiceReference.LWP16ServiceClient client = new LWP16ServiceReference.LWP16ServiceClient(); // Открываем сеанс связи со службой
returnString1 = client.GetInt(Convert.ToInt32(textBox1.Text));
label1.Text = returnString1;
returnString2 = client.GetString(textBox2.Text);
label2.Text = returnString2;
client.Close(); // Закрываем сеанс связи
}
В этом же файле найдём:
public partial class LWP16Main : Form
{
Вставим после:
String returnString1;
String returnString2;
Код метода LWP 16 Main () изменим так:
public LWP16Main()
{
InitializeComponent();
label1.Text = "";
label2.Text = "";
textBox1.Text = "Ведите число";
textBox2.Text = "Введите строку";
button1.Text = "Связать со службой";
}
И для первого (верхнего) TextBox объявим событие KeyPress, в котором запретим вводить все символы кроме цифр. Если этого не сделать, поймаем исключение. Служба на это поле будет передавать данные из метода GetInt (), который в качестве параметра принимает только int. Можно обойтись и без события для TextBox, тогда исключение можно обработать try - catch блоком. Код события:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
// Введённые символы должны быть только цифрами, иначе ввода не будет (символ не введётся)
if (!Char.IsDigit(e.KeyChar))
{
e.Handled = true;
}
}
Сделаем нашу форму автоматически запускаемой при компиляции. Откроем свойства решения ( ) и в поле Запускаемый проект выберем LWP16WCFClient:
Компилируем приложение (Release) и запускаем. Откроется форма клиента. Вводим в первое поле цифры, во второе какую-нибудь строку и жмём на кнопку Связаться со службой. Получаем ответ в виде двух статических строк внизу формы:
Рис. 3. 6. Модифицированное приложение Windows Forms: работа клиента для службы WCF
Дата добавления: 2019-09-13; просмотров: 201; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!