Modelo de código para servicios web en código administrado

Actualización: noviembre 2007

Los servicios web se componen de dos partes: el punto de entrada al servicio web y el código que implementa la funcionalidad del servicio web. En ASP.NET, el archivo .asmx es un archivo de texto que sirve de punto de entrada direccionable del servicio web. Hace referencia al código de ensamblados precompilados, a un archivo de código subyacente o a un código contenido en el propio archivo .asmx.

Nota:

Si el código está contenido directamente en el archivo .asmx, ASP.NET lo compilará a petición en el servidor.

La directiva de procesamiento WebService situada en la parte superior del archivo .asmx determina dónde se buscará la implementación del servicio web. De forma predeterminada, Visual Studio utiliza archivos de código en segundo plano, como Service1.asmx.vb o Service1.asmx.cs, cuando se crea un servicio web con la plantilla de proyecto de servicio web ASP.NET.

Nota:

Visual Studio no admite la compilación entre lenguajes. Por ejemplo, no es posible incluir un servicio web de Visual C# en un proyecto de aplicación web ASP.NET de Visual Basic, y viceversa.

Cuando se crea un servicio web en código administrado, ASP.NET automáticamente proporciona la infraestructura y controla el procesamiento de solicitudes y respuestas del servicio web, incluido el análisis y la creación de mensajes SOAP.

Directiva de procesamiento WebService

La directiva de procesamiento WebService, situada en la parte superior de la página .asmx, contiene información en forma de atributos relacionados con la implementación del servicio web. Esta directiva de procesamiento proporciona información necesaria al entorno ASP.NET, así cómo la clase que implementará la funcionalidad del servicio web. A continuación se ofrece un ejemplo de la directiva de procesamiento WebService:

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


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

El atributo Language indica el lenguaje de programación utilizado para desarrollar el servicio web. Los servicios web se pueden crear en cualquier lenguaje compatible con .NET, como Visual Basic .NET o Visual C#.

Al crear servicios web en código administrado con Visual Studio .NET, la implementación del servicio web reside en un archivo de código en segundo plano. El archivo de código subyacente se asocia a la página .asmx mediante el atributo Codebehind.

Nota:

Este atributo ayuda a Visual Studio a administrar el proyecto de servicio web y no es necesario en tiempo de ejecución.

Cuando se utiliza la plantilla de proyecto de servicio web ASP.NET, el atributo Class indica qué clase del archivo de código subyacente implementará la funcionalidad del servicio web.

Visual Studio .NET inserta automáticamente esta directiva de procesamiento en el archivo .asmx cuando se utiliza la plantilla de proyecto de servicio Web ASP.NET.

Sugerencia:

Si se decide cambiar el nombre de la clase, hay que asegurarse de cambiarlo en el atributo Class de la directiva WebService.

Nota:

Para ver el contenido del archivo .asmx, en el Explorador de soluciones, haga clic con el botón secundario del mouse en el archivo .asmx y después haga clic en Abrir con en el menú de acceso directo. En el cuadro de diálogo Abrir con, seleccione Editor de código fuente (texto) y, a continuación, haga clic en Abrir.

Para obtener más información, vea Tutorial: Generar un servicio web XML básico con ASP.NET..

Clase System.Web.Services.WebService

La clase System.Web.Services.WebService, que define la clase base opcional de los servicios web, proporciona acceso directo a los objetos ASP.NET comunes, como los destinados a estados de aplicación y de sesión. De forma predeterminada, los servicios web creados en código administrado con Visual Studio se heredan de esta clase. El servicio web se puede heredar de esta clase para obtener acceso a objetos intrínsecos de ASP.NET, como Request y Session. Para obtener más información, vea WebService (Clase).

Si el servicio web no hereda de esta clase, puede obtener acceso a objetos intrínsecos de ASP.NET desde System.Web.HttpContext.Current. La clase que implementa el servicio web debe ser pública y debe tener un constructor público predeterminado (sin parámetros). De este modo ASP.NET podrá crear una instancia de la clase del servicio web para procesar las solicitudes de servicio web entrantes. Para obtener más información, vea HttpContext.Current (Propiedad).

[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.
}

Para obtener más información, vea Herencia de la clase WebService.

Atributo WebService

Cada servicio web requiere un espacio de nombres único que permita a las aplicaciones cliente diferenciar entre los servicios web que utilicen el mismo nombre de método. El espacio de nombres predeterminado de los servicios web creados en Visual Studio .NET es "http://tempuri.org/WebService1/Service1", donde WebService1 es el nombre del proyecto y Service1 es el nombre de la clase. Aunque el espacio de nombres se asemeja a una dirección URL normal, no es de esperar que se pueda ver en un explorador web, ya que se trata simplemente de un identificador único.

Nota:

Quizá convenga incluir una página web en dicha ubicación con información sobre los servicios web proporcionados.

Utilice el atributo WebService para especificar el espacio de nombres y proporcionar una breve descripción del servicio web. Dicha descripción aparecerá en la página de ayuda del servicio web cuando se invoque dicho servicio desde un explorador sin especificar una cadena de consulta:

[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.
}

Para obtener más información, vea WebServiceAttribute (Clase) y Utilizar el atributo WebService.

Aplicar el atributo WebMethod

Para exponer un método como parte de un servicio web, hay que anteponer un atributo WebMethod a la declaración de cada método público que se vaya a exponer. Para obtener más información, vea Cómo: Crear un método de servicio web.

[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
}

El atributo WebMethod contiene varias propiedades para configurar el comportamiento del servicio web. Para obtener más información, vea WebMethodAttribute (Clase) y Utilizar el atributo WebMethod. Este atributo se puede utilizar, por ejemplo, para incluir una descripción breve que aparecerá en la página de ayuda del servicio asociado:

[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.
}

Separe varias propiedades con una coma. Por ejemplo, para proporcionar una descripción y almacenar en caché los resultados de un servicio web durante 60 segundos:

[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.
}

Resumen

Cada servicio web se compone de un archivo .asmx y una clase de servicio web. El archivo .asmx contiene una directiva de procesamiento WebService que hace referencia a la clase. La clase de servicio web es pública; tiene un constructor público predeterminado y contiene uno o varios métodos públicos marcados con el atributo WebMethod. El siguiente diagrama muestra la relación existente entre el proyecto, la clase, sus métodos y el servicio web resultante.

Clases WebService y elementos resultantes

Vea también

Conceptos

Modelo de código para obtener acceso a servicios web en código administrado

Otros recursos

Crear servicios web en código administrado