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: 65%
Похожие статьи по SilverLight:




Спасибо за то что ты делаешь ерально интересно читать
Очень хочется увидеть пример использования WCF сервисов.
Блин вот отлично описал! Не то что некоторые… Всё доступно и понятно!
[quote]Чтобы добавить ссылку на наш WebService, теперь уже необходимо у проекта SilverLight кликнуть по корневому каталогу в нашем случае SimpleService, и выбрать пункт меню «Add Service Reference …». После чего в открывшемся окне нажать «Descover», т.к. наш WebService локальный то нам он будет указан, в списке доступных, выбираем его и даем ему имя «MyService». И нажимаем «ок», все ссылка на наш сервис добавлена и мы можем его использовать в нашем проекте.[/quote]
Почему єто может не работать? на вебпроекте находит сервис как локальный сервис, на сильверлайтовском только как внешний сервис, который нельзя добавить(порт у меня фиксиный). Зарание спасибо
2 Yorik – я не совсем понял, почему у тебя не дает добавить можно по подробней. У тебя вообще отображается в списке доступных твой Веб сервис, который создал или нет. Для того, чтобы отобразились все доступные локальные веб сервисы, тебе надо нажать кнопку «Descover». И потому уже выбираешь свой.
Если конечно ты не поднимаешь его на отдельный машине, в таком случае надо указать конкретный адрес удаленной машины, с указание твоего сервиса, например CheckService.asmx.
2 Dmitriy – разницы в использовании WCF сервисов практически нет, немного отличается синтаксис, а фактически все тоже самое. Попробуй создать WCF сервис и проделать все тоже самое, если не получится я сделаю подобный, пример и выложу его в этой статье, как пример работы WCF сервиса.
2 All – Спасибо будем стараться писать полезные и интересные статьи
В жизни дело идет о жизни, а не о каком-то результате ее.(С)Иоганн Вольфганг Гете
было бы неплохо увидеть пример с применением ASP.NET MVC
Где я раньше искал?… Сам додумывался целый день, а тут понятно все, подробно. Спасибо за статью.
P.S. очень много ошибок, орфографических и пунктуационных :( Мешает читать
У меня это не катит: WS.SummaCompleted += new EventHandler(WS_SummaCompleted);
Вот так надо:
WS.SummaCompleted+=new EventHandler
(WS_SummaCompleted);
Может кому-то это само-собой разумеется – МНЭ НЭТ!
Ну да ладно чего уж там. СПАСИБО!
new EventHandler(WS_SummaCompleted);
Да блин чё за фигня, знаки «больше» и «меньше» не выводит, блин.
после «new EventHandler» надо писать
«меньше» SimpleService.MyService.SummaCompletedEventArgs «больше» и «(WS_SummaCompleted);»
Отличная статья, большое спасибо!Обожаю ваш блог!!!
WS.SummaCompleted+=new EventHandler(WS_SummaCompleted);
на этой строке говорит что нет перегруженного метода WS_SummaCompleted, который соответствует делегату System.EvantHandler
Ошибка!!!
WS.SummaCompleted+=new EventHandler(WS_SummaCompleted);
на этой строке говорит что нет перегруженного метода WS_SummaCompleted, который соответствует делегату System.EvantHandler
Здравствуйте! Подскажите, как обойти предупреждение о междоменной политике? Добавит ь файл xml не могу, не имею доступа к корню домена. Может есть другой способ?
Скажите, а в чем разница между WCF и WebServices?
Если коротко, то: WCF – фреймворк, а Web Service – метод обмена.
Правильно будет: WS.SummaCompleted+=new EventHandler(WS_SummaCompleted);
Правильно будет: WS.SummaCompleted+=new EventHandler(WS_SummaCompleted);