Поделиться через


Модель кода для веб-служб в управляемом коде

Обновлен: Ноябрь 2007

Веб-службы состоят из двух частей: точка входа веб-службы и код, который реализует функциональность веб-службы. В ASP.NET адресуемой точкой входа для веб-службы служит текстовый ASMX-файл. Он ссылается на код в предкомпилированных сборках, файл с выделенным кодом, или на код, содержащийся в самом ASMX-файле.

68zt3df9.alert_note(ru-ru,VS.90).gifПримечание.

Если код содержится непосредственно в самом ASMX-файле, ASP.NET будет компилировать его на сервере при обращении к нему.

Директива обработки WebService, стоящая в начале ASMX-файла, указывает, где находится реализация веб-службы. По умолчанию при создании веб-службы с помощью шаблона проекта веб-службы ASP.NET среда Visual Studio использует такие файлы с выделенным кодом, как, например, Service1.asmx.vb или Service1.asmx.cs.

68zt3df9.alert_note(ru-ru,VS.90).gifПримечание.

Visual Studio не поддерживает межъязыковую компиляцию. Например, невозможно включить веб-службу, написанную на языке C#, в проект веб-приложения ASP.NET на Visual Basic, и наоборот.

При построении веб-службы в управляемом коде среда ASP.NET автоматически обеспечивает инфраструктуру и обрабатывает запросы и ответы веб-службы, в том числе занимаясь разбором и формированием сообщений SOAP.

Директива обработки WebService

В начале ASMX-страницы находится директива обработки WebService, атрибуты которой содержат сведения о реализации веб-службы. Эта директива предоставляет среде ASP.NET необходимые сведения, например, о том, какой класс реализует функциональность веб-службы. Ниже приведен пример директивы обработки WebService:

[Visual Basic]
<%@ WebService Language="vb" Codebehind="Service1.asmx.vb"
    Class="WebService1.Service1" %>


[C#]
<%@ WebService Language="c#" Codebehind="Service1.asmx.cs"
    Class="WebService1.Service1" %>

Атрибут Language указывает, какой язык программирования использовался для разработки веб-службы. Веб-службы можно разрабатывать на любом языке, совместимом с .NET — например, на Visual Basic .NET или на Visual C#.

При создании веб-служб в управляемом коде с использованием Visual Studio .NET реализация веб-службы находится в файле с выделенным кодом. Файл с выделенным кодом связывается с ASMX-страницей посредством атрибута Codebehind.

68zt3df9.alert_note(ru-ru,VS.90).gifПримечание.

Этот атрибут помогает Visual Studio управлять проектом веб-службы и не используется во время выполнения.

При использовании шаблона проекта веб-службы ASP.NET атрибут Class указывает, какой класс в файле с выделенным кодом реализует функциональные возможности веб-службы.

При использовании шаблона проекта веб-службы ASP.NET Visual Studio .NET автоматически вставляет эту директиву в ASMX-файл.

68zt3df9.alert_note(ru-ru,VS.90).gifСовет.

Если возникла необходимость переименовать класс, не забудьте изменить имя класса в атрибуте Class директивы WebService.

68zt3df9.alert_note(ru-ru,VS.90).gifПримечание.

Чтобы просмотреть содержимое ASMX-файла, в обозревателе решений щелкните правой кнопкой мыши ASMX-файл и выберите в контекстном меню команду Открыть с помощью. В диалоговом окне Открыть с помощью выберите Редактор исходного кода и нажмите кнопку Открыть.

Дополнительные сведения см. в разделе Walkthrough: Building a Basic XML Web Service Using ASP.NET.

Класс System.Web.Services.WebService

System.Web.Services.WebService — это необязательный базовый класс веб-служб, обеспечивающий прямой доступ к таким базовым объектам ASP.NET, как, например, приложение или состояние сеанса. По умолчанию веб-службы, созданные в управляемом коде с помощью Visual Studio, наследуют от этого класса. Веб-службы могут наследовать от этого класса для получения доступа к таким встроенным объектам ASP.NET, как, например, Request и Session. Дополнительные сведения см. в разделе Класс WebService.

Если веб-служба не наследует от этого класса, она может обращаться к встроенным объектам ASP.NET через свойство System.Web.HttpContext.Current. Класс, реализующий веб-службу, должен быть открытым и иметь открытый конструктор по умолчанию (конструктор без параметров). Это позволяет ASP.NET создавать экземпляры класса веб-службы для обработки входящих запросов к веб-службе. Дополнительные сведения см. в разделе Свойство HttpContext.Current.

[Visual Basic]
Imports System.Web.Services
Public Class Service1
   Inherits System.Web.Services.WebService
   ' Implementation code.
End Class


[C#]
using System.Web.Services;
public class Service1 : System.Web.Services.WebService
{
   // Implementation code.
}

Дополнительные сведения см. в разделе Наследование от класса WebService.

Атрибут WebService

Каждая веб-служба нуждается в уникальном пространстве имен; это позволяет клиентским приложениям различать веб-службы, которые могут публиковать методы с одинаковыми именами. Стандартное пространство имен для веб-служб, создаваемых в среде Visual Studio .NET, — http://tempuri.org/WebService1/Service1, где WebService1 — это имя проекта, а Service1 — имя класса. Хотя пространство имен похоже на обычный URL-адрес, не следует думать, что его можно открыть в веб-обозревателе: это просто уникальный идентификатор.

68zt3df9.alert_note(ru-ru,VS.90).gifПримечание.

Иногда имеет смысл разместить по этому адресу веб-страницу, которая содержала бы сведения о публикуемых веб-службах.

С помощью атрибута WebService можно указать пространство имен и предоставить краткое описание веб-службы. Краткое описание будет отображаться на странице справки службы при вызове веб-службы через обозреватель без указания строки запроса:

[Visual Basic]
<System.Web.Services.WebService( _ 
   Namespace:="http://tempuri.org/WebService1/Service1", _ 
   Description:="A short description of the Web service.")> _
Public Class Service1
   Inherits System.Web.Services.WebService
   ' Implementation code.
End Class


[C#]
[System.Web.Services.WebService( 
   Namespace="http://tempuri.org/WebService1/Service1",  
   Description="A short description of the Web service.")] 
public class Service1 : System.Web.Services.WebService
{
   // Implementation code.
}

Дополнительные сведения см. в разделах Класс WebServiceAttribute и Использование атрибута WebService.

Применение атрибута WebMethod

Чтобы опубликовать метод в составе веб-службы, необходимо поместить атрибут WebMethod перед объявлением каждого открытого метода, который должен быть опубликован. Дополнительные сведения см. в разделе Практическое руководство. Создание метода веб-службы.

[Visual Basic]
<System.Web.Services.WebMethod()> _
Public Function MyString(ByVal x as string) As String
   ' Implementation code.
End Function


[C#]
[System.Web.Services.WebMethod()] 
public string MyString(string x) 
{
   //implementation code
}

Атрибут WebMethod содержит несколько свойств, определяющих поведение веб-службы. Дополнительные сведения см. в разделах Класс WebMethodAttribute и Использование атрибута WebMethod. Например, можно использовать этот атрибут для задания краткого описания, которое появится на соответствующей справочной странице службы:

[Visual Basic]
<System.Web.Services.WebMethod( _ 
   Description:="A short description of this method.")> _
Public Function MyString(ByVal x as string) As String
   ' Implementation code.
End Function


[C#]
[System.Web.Services.WebMethod( 
   Description="A short description of this method.")] 
public string MyString(string x) 
{
   // Implementation code.
}

Несколько идущих подряд свойств следует разделять запятыми. Пример задания описания и включения сохранения результатов работы веб-службы в кэше на протяжении 60 секунд:

[Visual Basic]
<System.Web.Services.WebMethod( _ 
   Description:="A short description of this method.", _ 
           CacheDuration:=60)> _
Public Function MyString(ByVal x as string) As String
   ' Implementation code.
End Function


[C#]
[System.Web.Services.WebMethod( 
   Description="A short description of this method.", 
   CacheDuration=60)] 
public string MyString(string x) 
{
   // Implementation code.
}

Сводная информация

Любая веб-служба состоит из ASMX-файла и класса веб-службы. ASMX-файл содержит директиву обработки WebService, которая ссылается на этот класс. Класс веб-службы является открытым, имеет открытый конструктор по умолчанию и один или несколько открытых методов, помеченных атрибутом WebMethod. Следующая диаграмма демонстрирует взаимосвязь между проектом, классом, его методами и итоговой веб-службой.

Классы WebService и итоговые объекты
Элементы развертывания проекта веб-службы

См. также

Основные понятия

Модель кода для доступа к веб-службам в управляемом коде

Другие ресурсы

Создание веб-служб в управляемом коде