Если мы имеем доступ к коду WSDL для службы Web, то мы можем его использовать. Как мы скоро увидим, это не так уж трудно сделать.
Теперь, когда мы кратко ознакомились с SOAP и WSDL, пришло время посмотреть, как создаются и используются службы Web.
Службы Web
Обсуждение служб Web включает два вопроса:
□ Создание служб Web, которое связано с написанием служб Web и размещением их на серверах Web.
□ Использование служб Web, которое связано с применением на стороне клиента созданных служб.
Создание
служб Web
Службы Web создают, либо помещая код прямо в файлы
.asmx
, либо, ссылаясь на классы службы Web из этих файлов. Как и со страницами ASP.NET, создание службы Web в VS.NET применяет последний подход, и он также будет использоваться для целей демонстрации.
Создание проекта службы Web, называемой
PCSWebSrv1
, как показано выше, приводит, как и для проекта приложения Web, к аналогичному множеству созданных файлов. Фактически, единственное различие состоит в том, что вместо создания файла с именем
WebForm1.aspx
создается файл с именем
Service1.asmx
. Созданный файл
.vsdisco
отвечает за идентификацию службы Web, чтобы система Visual Studio .NET, как мы вскоре увидим, могла добавить на него ссылку Web.
Код в
Service1.asmx
не доступен непосредственно через VS.NET, но просмотр с помощью Notepad показывает следующую строку кода:
Этот код ссылается на файл кода, который можно увидеть в VS.NET, —
Service1.asmx.cs
, доступный при щелчке правой кнопкой мыши на
Service1.asmx
в Solution Explorer и выборе View Code. Созданный код с удаленными для краткости комментариями показан ниже:
namespace PCSWebSrv1 {
using system;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;
public class Service1 : System.Web.Services.WebService {
public Service1 {
InitializeComponent;
}
private void InitializeComponent {
}
public override void Dispose {
}
}
}
Этот код определяет пространство имен
PCSWebSrv1
с несколькими ссылками на стандартные пространства имен и класс службы Web с именем
Service1
(ссылку на который мы видели выше в файле
Service1.asmx
),
производный от
System.Web.Services.WebService
. Мы должны предоставить методы для этого класса службы Web.
Добавление метода, доступного через службу Web, требует простого определения метода как
public
и задание для него атрибута
WebMethod
. Этот атрибут помечает методы, которые мы хотим сделать доступными. Вскоре мы рассмотрим типы данных, которые можно использовать для возвращаемого типа и для параметров, но пока добавим следующий метод:
[WebMethod]
public String CanWeFixIt {
return "Yes we can!";
}
и откомпилируем метод.
Можно проверить, как это будет работать, направляя браузер Web на файл
Service1.asmx
:
Щелчок на имени метода предоставляет нам информацию о запросе и ответе SOAP, а также примеры того, как запрос и ответ будут выглядеть с помощью методов HTTP GET и HTTP POST. Можно также протестировать метод, нажимая на предоставленную кнопку Invoke (если метод требует простых параметров, их также можно ввести в этой форме). Если сделать это, мы увидим код XML, возвращаемый вызовом метода:
<?xml version="1.0" ?>
<string xmlns="http://tempuri.org/">Yes we can!</string>
Это показывает, что метод работает прекрасно.
Следование по ссылке Service Description, показанной на экране браузера выше, позволяет увидеть описание WSDL службы Web. Наиболее важной частью, имеющей к нам отношение, является описание типов элементов для запросов и ответов:
Это описание содержит также описание типов данных, требуемых для запросов и ответов, а также различных соединений для службы, делая его достаточно длинным файлом.