Работа с WebService в SilverLight 2 beta 2
WebService – это особая технология, используемая в распределенных системах для взаимодействия между удаленными серверами. Развертывается на основе веб сервера IIS. Использует протокол http, основанный на http протокол SOAP (XML). На ее основе работают создаются приложения SilverLight, работающие с удаленными системами.
Технология очень удобна тем, что легко подключается через Visual Studio, и в последствии легко используется, как готовый класс, со всеми его методами и полями, доступные для удаленного использования.
И так приступим, создадим проект SilverLight, назовем его «SimpleService».
Укажем, чтобы Visual Studio создало для нас веб проект, с тестовой страничкой.
Так как я хочу продемонстрировать работу, SilverLight и WebService, мне понадобится кнопка и поле ввода для того, чтобы запросить информацию у WebService, и TextBlock для того, чтобы вывести информацию.
Код XAML:
<UserControl x:Class="SimpleService.Page" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="400" Height="300"> <StackPanel x:Name="LayoutRoot" Background="White"> <TextBox x:Name="FirstNumber" Width="100" Height="50" Text="First Number …" /> <TextBox x:Name="SecondNumber" Width="100" Height="50" Text="Second Number …" /> <TextBlock x:Name="OutPutText" Width="100" Height="50" Text="Input Text …" /> <Button x:Name="Call" Width="100" Height="50" Content="Call Service" Click="Call_Click" /> </StackPanel></UserControl>
Теперь необходимо создать на WebService. Мы его будем создавать в веб проекте. Для этого Правой клавишей нажимаем по корневому каталогу веб проекта (Название его будет таким [Название вашего Solution]Web, в моем случае SimpleService) и выбираем – «Add New Item». Откроется окно шаблонов, предлагаемых Visual Studio. Выбираем WebService. Укажем имя, например «MyService». И так веб сервис создан, он состоит из двух файлов MyService.asmx и MyService.cs.
Содержимое файла MyService.asmx:
<%@ WebService Language="C#" CodeBehind="~/App_Code/MyService.cs" Class="MyService" %>
Как видите код нашего сервиса расположен в специальном каталого App_Code.
Откроем его:
Код C#:
using System;
using System.Collections;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
///
/// Summary description for MyService
///
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class MyService : System.Web.Services.WebService
{
public MyService()
{
//Uncomment the following line if using designed components
//InitializeComponent();
}
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
}
Visual Studio позаботилась о нас и сгенерировала нужный нам код, и даже сгенерировала тестовый метод Hello World, с помощью, которого можно проверить работоспособность нашего WebService.
Давайте проверим, работаем ли наш WebService. Для этого правой клавишей нажимаем по файлу MyService.asmx и выбираем «View in Browser».
Здесь показывается стандратная страница WebService со всеми доступными методами, в нашем случае Hello World. Кликнув, на него мы увидим описание запросов, которые будут отправлены и обработаны. Нажав, на кнопку «Invoke» мы увидим реальные данные, возвращаемые нашим методом.
Все это конечно хорошо скажете вы, а где собственно SilverLight. Не торопитесь, это была вводная часть, чтобы люди, кто не имел дело с WebService, могли ознакомиться и пощупать, что вообще это такое.
Чтобы добавить ссылку на наш WebService, теперь уже необходимо у проекта SilverLight кликнуть по корневому каталогу в нашем случае SimpleService, и выбрать пункт меню «Add Service Reference …». После чего в открывшемся окне нажать «Descover», т.к. наш WebService локальный то нам он будет указан, в списке доступных, выбираем его и даем ему имя «MyService». И нажимаем «ок», все ссылка на наш сервис добавлена и мы можем его использовать в нашем проекте. В случае если вы внесли изменения в ваш сервис, ссылку необходимо обновить. Для этого в папке «Service Reference» Находим нашу ссылку, нажимаем по ней правой клавишей и выбираем «Update»
Приступим к написанию нашего собственно метода. И так задача у нас очень простая, получаем два числа от пользователя, складываем, отдаем результат обратно.
Код C#:
[WebMethod]
//Получаем строки, чтобы не заботиться об это в SilverLight
public int Summa(string firstNumber, string secondNumber)
{
int number1;
int number2;
//Пытаемся с конвертить в int
int.TryParse(firstNumber, out number1);
int.TryParse(secondNumber, out number2);
return (number1 + number2);
}
Методы WebService должны быть помечены специальным атрибутом WebMethod, который позволяет специальным образом вызывать наш метод из вне. Ну а потом все просто думаю, здесь вопросов не должно возникнуть, если кому, то захочется может добавить свои дополнительные проверки. И так метод наш создан.
Вернемся к нашему SilverLight приложению, у кнопки создадим обработчик события Click.
private void Call_Click(object sender, RoutedEventArgs e)
{
//Создаем SOAPClient который будем использовать для вызова методов
MyService.MyServiceSoapClient WS = new SimpleService.MyService.MyServiceSoapClient();
//Создаем обработчик события, который вернет результаты работы нашего WebService
WS.SummaCompleted += new EventHandler(WS_SummaCompleted);
//Вызываем наш метод и передаем параметры
WS.SummaAsync(FirstNumber.Text, SecondNumber.Text);
}
void WS_SummaCompleted(object sender, SimpleService.MyService.SummaCompletedEventArgs e)
{
//Присваем нашему TextBlock результаты работы методы
OutPutText.Text = e.Result.ToString();
}
Проверяем, как видите метод возвращает нам, сумму введеных нами чисел.
Вот так вот не сложно можно создать приложение, которое будет использовать методы удаленного WebService. И может возвращать нам, например отчеты по продажам, или последние новости. А мы в красивой форме можем оформить это все в SilverLight.
В следующей своей статье, я покажу более реальный и более интересный пример работы с WebService.
Popularity: 37% [?]



Июнь 25th, 2008 at 18:12
Спасибо за то что ты делаешь ерально интересно читать
Июнь 26th, 2008 at 13:54
Очень хочется увидеть пример использования WCF сервисов.
Июнь 28th, 2008 at 20:23
Блин вот отлично описал! Не то что некоторые… Всё доступно и понятно!
Июль 5th, 2008 at 19:57
[quote]Чтобы добавить ссылку на наш WebService, теперь уже необходимо у проекта SilverLight кликнуть по корневому каталогу в нашем случае SimpleService, и выбрать пункт меню «Add Service Reference …». После чего в открывшемся окне нажать «Descover», т.к. наш WebService локальный то нам он будет указан, в списке доступных, выбираем его и даем ему имя «MyService». И нажимаем «ок», все ссылка на наш сервис добавлена и мы можем его использовать в нашем проекте.[/quote]
Почему єто может не работать? на вебпроекте находит сервис как локальный сервис, на сильверлайтовском только как внешний сервис, который нельзя добавить(порт у меня фиксиный). Зарание спасибо
Июль 7th, 2008 at 21:34
2 Yorik - я не совсем понял, почему у тебя не дает добавить можно по подробней. У тебя вообще отображается в списке доступных твой Веб сервис, который создал или нет. Для того, чтобы отобразились все доступные локальные веб сервисы, тебе надо нажать кнопку “Descover”. И потому уже выбираешь свой.
Если конечно ты не поднимаешь его на отдельный машине, в таком случае надо указать конкретный адрес удаленной машины, с указание твоего сервиса, например CheckService.asmx.
2 Dmitriy - разницы в использовании WCF сервисов практически нет, немного отличается синтаксис, а фактически все тоже самое. Попробуй создать WCF сервис и проделать все тоже самое, если не получится я сделаю подобный, пример и выложу его в этой статье, как пример работы WCF сервиса.
2 All - Спасибо будем стараться писать полезные и интересные статьи
Июль 10th, 2008 at 23:28
[…] Работа с WebService в SilverLight 2 beta 2 […]
Июль 21st, 2008 at 23:32
В жизни дело идет о жизни, а не о каком-то результате ее.(С)Иоганн Вольфганг Гете
Август 13th, 2008 at 12:07
Познавательно. Хотелось бы еще выслушать мнение специалистов по этому поводу :)