Службы 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 показывает следующую строку кода:

<%@ WebService Language='c#' Codebehind='Service1.asmx.cs' Class='PCSWebSrv1.Service1' %>

Этот код ссылается на файл кода, который можно увидеть в 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. Наиболее важной частью, имеющей к нам отношение, является описание типов элементов для запросов и ответов:

<types>

 <s:schema attributeFormDefault='qualified' elementFormPefault='qualified'

  targetNamespace='http://tempuri.org/'>

  <s:element name='CanWeFixIt'>

   <s:complexType />

  </s:element>

  <s:element name='CanWeFixItResponse'>

   <s:complexType>

    <s:sequence>

     <s:element name='CanWeFixItResult' nullable='true' type='s:string' />

    </s:sequence>

   </s:complexType>

  </s:element>

  <s:element name='string' nullable='true' type='s:string' />

 </s:schema>

</types>

Это описание содержит также описание типов данных, требуемых для запросов и ответов, а также различных соединений для службы, делая его достаточно длинным файлом.

Типы данных, доступные для служб Web

Службы Web могут использоваться для обмена любыми из следующих типов данных:

String           Char    Byte

Boolean          Int16   Int32

Int64            UInt16  UInt32

UInt64           Single  Double

Guid             Decimal DateTime

XmlQualifiedName class   struct

XmlNode          DataSet

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату