Compartir a través de


Declarar un servicio Web XML

Al crear un servicio Web XML en ASP.NET, la directiva requerida @ WebService se coloca al principio de un archivo de texto con la extensión .asmx. La existencia del archivo .asmx y la directiva @ WebService establecen una correlación entre la dirección URL del servicio Web XML y la implementación del servicio. A continuación se implementa la clase de servicio Web XML que define los métodos y tipos de datos visibles para los clientes del servicio. Por último, se agrega la lógica del servicio Web XML a dichos métodos para procesar las solicitudes del servicio Web XML y devolver respuestas. La clase del servicio Web XML definida se puede incluir directamente en el archivo .asmx o en un archivo independiente. Si se utiliza un archivo independiente, se debe compilar en un ensamblado. Opcionalmente, se puede aplicar un atributo WebService a la clase que implementa el servicio Web XML. Dicha clase puede derivarse de la clase WebService.

Para declarar un servicio Web XML cuya implementación reside en el mismo archivo

  • Al principio de un archivo con la extensión .asmx, agregue una directiva @ WebService en la que se especifique la clase que implementa el servicio Web XML y el lenguaje de programación utilizado en la implementación.

    El atributo Class se puede establecer en una clase que resida en el mismo ensamblado que la directiva @ WebService o en una clase contenida en un ensamblado independiente. Si la clase reside en un ensamblado independiente, se debe colocar en el directorio \Bin de la aplicación Web donde reside el servicio Web XML. El atributo Language se puede establecer en C#, VB y JS, que hacen referencia a C#, Visual Basic .NET y JScript .NET, respectivamente.

    En el ejemplo de código siguiente, el atributo Language de la directiva @ WebService se establece en C# y el atributo Class en MyMath, que reside en el mismo archivo.

    <%@ WebService Language="C#" Class="MyMath" %>
    using System.Web.Services;
    public class MyMath {
         [ WebMethod ]
         public int Add(int num1, int num2) {
              return num1+num2;
         }
    }
    

Para declarar un servicio Web XML cuya implementación reside en un ensamblado

  • Al principio de un archivo con la extensión .asmx, agregue una directiva @ WebService en la que se especifique la clase que implementa el servicio Web XML, el ensamblado que contiene la implementación y el lenguaje de programación utilizado en ésta.

    La siguiente directiva @ WebService es la única línea de un archivo con la extensión .asmx, donde se especifica que la clase MyName.MyWebService reside en el ensamblado MyAssembly que se encuentra en el directorio \Bin de la aplicación Web en la que se aloja el servicio Web XML.

    <%@ WebService Language="C#" Class="MyName.MyWebService,MyAssembly" %>
    [Visual Basic]
    <%@ WebService Language="VB" Class="MyName.MyWebService,MyAssembly" %>
    

    Nota Si no especifica un ensamblado en la directiva @ WebService, ASP.NET buscará en la lista de ensamblados contenidos en el directorio \Bin de la aplicación Web que aloja el servicio Web XML la primera vez que se tenga acceso al servicio. Por lo tanto, si proporciona el nombre del ensamblado, el rendimiento obtenido en el primer acceso mejorará.

Aplicar el atributo WebService

Al aplicar el atributo opcional WebService a una clase que implementa un servicio Web XML se puede establecer el espacio de nombres XML predeterminado para el servicio Web XML, además de una cadena que describe el servicio Web XML.

Es aconsejable cambiar el espacio de nombres predeterminado, que es http://tempuri.org, antes de publicar definitivamente el servicio Web XML. Esto es importante porque el servicio Web XML debe distinguirse de otros servicios Web XML que puedan utilizar de forma inadvertida el espacio de nombres predeterminado (<http://tempuri.org/>).

Para establecer el espacio de nombres XML al que pertenece un servicio Web XML

  • Aplique un atributo WebService a la clase que implementa el servicio Web XML, donde se establezca la propiedad Namespace.

En el ejemplo de código siguiente, el espacio de nombres XML se establece a https://www.contoso.com/.

<%@ WebService Language="C#" Class="Math" Debug=true%>
using System.Web.Services;
using System;

[WebService(Namespace="https://www.contoso.com/")]
public class Math {
     [ WebMethod ]
     public int Add(int num1, int num2) {
         return num1+num2;
         }
 }
[Visual Basic]
<%@ WebService Language="VB" Class="Math"%>
Imports System.Web.Services
Imports System

<WebService(Namespace:="https://www.contoso.com/")> _
Public Class Math
  <WebMethod()> _
   Public Function Add(num1 As Integer, num2 As Integer) _
                   As Integer
        Return num1 + num2
    End Function 
End Class 

Derivar de la clase WebService

Las clases que implementan un servicio Web XML creado mediante ASP.NET se pueden derivar opcionalmente de la clase WebService para obtener acceso a los objetos comunes de ASP.NET, como Application, Session, User y Context. Las propiedades Application y Session proporcionan acceso al estado de almacenamiento y recepción en el intervalo de la duración de la aplicación Web o de una sesión determinada. Para obtener más información acerca de la administración de estados, vea Administrar el estado en servicios Web XML creados mediante ASP.NET. La propiedad User contiene la identidad del llamador, si está habilitada la autenticación, para el servicio Web XML. Con la identidad, un servicio Web XML puede determinar si la solicitud está autorizada. Para obtener más información acerca de la autenticación, vea Proteger servicios Web XML. La propiedad Context proporciona acceso a toda la información específica de HTTP acerca de la solicitud del cliente de servicios Web XML. Para obtener más información acerca de la propiedad Context, vea WebService.Context (Propiedad).

En el siguiente ejemplo de código, se utiliza la propiedad Context para obtener el tiempo de la solicitud en el servidor.

<%@ WebService Language="C#" Class="Util" %>
using System;
using System.Web.Services;

public class Util: WebService {
   [ WebMethod(Description="Returns the time as stored on the Server",
               EnableSession=false)]
   public string Time() 
   {
      return Context.Timestamp.TimeOfDay.ToString();
   }
 } 
[Visual Basic]
<%@ WebService Language="VB" Class="Util" %>
Imports System
Imports System.Web.Services

Public Class Util
   Inherits WebService
   
   <WebMethod(Description := "Returns the time as stored on the Server", _
              EnableSession := False)> _
   Public Function Time() As String
        Return Context.Timestamp.TimeOfDay.ToString()
   End Function
End Class

Vea también

Definir métodos de servicio Web XML | Generar servicios Web XML mediante ASP.NET | Generar servicios Web XML mediante cuestiones básicas de ASP.NET