Работа с WebService в SilverLight 2 beta 2

Опубликовано 24 Июнь | Автор LOB
Ключевые слова:,

WebService – это особая технология, используемая в распределенных системах для взаимодействия между удаленными серверами. Развертывается на основе веб сервера IIS. Использует протокол http, основанный на http протокол SOAP (XML). На ее основе работают создаются приложения SilverLight, работающие с удаленными системами.

Технология очень удобна тем, что легко подключается через Visual Studio, и в последствии легко используется, как готовый класс, со всеми его методами и полями, доступные для удаленного использования.

И так приступим, создадим проект SilverLight, назовем его «SimpleService».

http://silverlightru.net/

Укажем, чтобы Visual Studio создало для нас веб проект, с тестовой страничкой.

http://silverlightru.net/

Так как я хочу продемонстрировать работу, 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>

http://silverlightru.net/

Теперь необходимо создать на 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».

http://silverlightru.net/

Здесь показывается стандратная страница WebService со всеми доступными методами, в нашем случае Hello World. Кликнув, на него мы увидим описание запросов, которые будут отправлены и обработаны. Нажав, на кнопку «Invoke» мы увидим реальные данные, возвращаемые нашим методом.

http://silverlightru.net/

http://silverlightru.net/

Все это конечно хорошо скажете вы, а где собственно SilverLight. Не торопитесь, это была вводная часть, чтобы люди, кто не имел дело с WebService, могли ознакомиться и пощупать, что вообще это такое.

Чтобы добавить ссылку на наш WebService, теперь уже необходимо у проекта SilverLight кликнуть по корневому каталогу в нашем случае SimpleService, и выбрать пункт меню «Add Service Reference …». После чего в открывшемся окне нажать «Descover», т.к. наш WebService локальный то нам он будет указан, в списке доступных, выбираем его и даем ему имя «MyService». И нажимаем «ок», все ссылка на наш сервис добавлена и мы можем его использовать в нашем проекте. В случае если вы внесли изменения в ваш сервис, ссылку необходимо обновить. Для этого в папке «Service Reference» Находим нашу ссылку, нажимаем по ней правой клавишей и выбираем «Update»

http://silverlightru.net/

Приступим к написанию нашего собственно метода. И так задача у нас очень простая, получаем два числа от пользователя, складываем, отдаем результат обратно.

Код 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();
}

http://silverlightru.net/

Проверяем, как видите метод возвращает нам, сумму введеных нами чисел.
Вот так вот не сложно можно создать приложение, которое будет использовать методы удаленного WebService. И может возвращать нам, например отчеты по продажам, или последние новости. А мы в красивой форме можем оформить это все в SilverLight.

В следующей своей статье, я покажу более реальный и более интересный пример работы с WebService.

Popularity: 37% [?]

Add to zakladki:
8 комментария | Примеры | Вся статья

8 Комментария к статье “Работа с WebService в SilverLight 2 beta 2”

  1. Спасибо за то что ты делаешь ерально интересно читать

  2. Очень хочется увидеть пример использования WCF сервисов.

  3. Блин вот отлично описал! Не то что некоторые… Всё доступно и понятно!

  4. [quote]Чтобы добавить ссылку на наш WebService, теперь уже необходимо у проекта SilverLight кликнуть по корневому каталогу в нашем случае SimpleService, и выбрать пункт меню «Add Service Reference …». После чего в открывшемся окне нажать «Descover», т.к. наш WebService локальный то нам он будет указан, в списке доступных, выбираем его и даем ему имя «MyService». И нажимаем «ок», все ссылка на наш сервис добавлена и мы можем его использовать в нашем проекте.[/quote]
    Почему єто может не работать? на вебпроекте находит сервис как локальный сервис, на сильверлайтовском только как внешний сервис, который нельзя добавить(порт у меня фиксиный). Зарание спасибо

  5. 2 Yorik - я не совсем понял, почему у тебя не дает добавить можно по подробней. У тебя вообще отображается в списке доступных твой Веб сервис, который создал или нет. Для того, чтобы отобразились все доступные локальные веб сервисы, тебе надо нажать кнопку “Descover”. И потому уже выбираешь свой.
    Если конечно ты не поднимаешь его на отдельный машине, в таком случае надо указать конкретный адрес удаленной машины, с указание твоего сервиса, например CheckService.asmx.

    2 Dmitriy - разницы в использовании WCF сервисов практически нет, немного отличается синтаксис, а фактически все тоже самое. Попробуй создать WCF сервис и проделать все тоже самое, если не получится я сделаю подобный, пример и выложу его в этой статье, как пример работы WCF сервиса.

    2 All - Спасибо будем стараться писать полезные и интересные статьи

  6. […] Работа с WebService в SilverLight 2 beta 2 […]

  7. В жизни дело идет о жизни, а не о каком-то результате ее.(С)Иоганн Вольфганг Гете

  8. Познавательно. Хотелось бы еще выслушать мнение специалистов по этому поводу :)

Leave a Reply

Ваш Комментарий * [b][/b] - [i][/i] - [u][/u]- [quote][/quote]