Professional Documents
Culture Documents
En ASP.NET los archivos de los Servicios Web XML estn identificados por la extensin .asmx. Estos
archivos son diferentes de los Web Forms; no definen ningn interfaz de usuario, solo definen las clases
y mtodos del Servicio Web XML. Es importante tener en mente que el consumidor de un Servicio Web
XML es otra aplicacin, no una persona, por eso el interfaz de usuario no es importante, lo que es
importante es el interfaz de la clase.
Un fichero .asmx bsico, sera como sigue:
Qu es la directiva @WebService?
La primera parte de un fichero .asmx es la directiva @WebService. Esta directiva, como la directiva
@Page de un Web Form, se usa para identificar atributos especficos de un archivo de un Servicio Web
XML.
Language Especifica el lenguaje .NET que se usa para crear el Servicio Web XML.
Class Nos dice el nombre de la clase que est siendo expuesto como un Servicio Web XML. Esta
clase puede ser definida en el fichero .asmx, o en un ensamblado (assembly), que resida en el
directorio /bin de la aplicacin Web.
La directiva @WebService es el nico cdigo requerido por el fichero .asmx. Podemos crear un Servicio
Web XML de dos formas:
Definiendo la clase en el fichero .asmx, la cual luego ser compilada con un compilador JIT.
Definir la clase en un ensamblado (assembly), que sea compilado y que resida en el directorio
/bin de la aplicacin.
El atributo WebService
El atributo WebService, el cual es actualmente la clase System.Web.Service.WebServiceAttribute , es un
atributo opcional que puede ser aplicado a una clase pblica que est siendo expuesta como un Servicio
Web XML. Podemos usar el atributo WebService para aplicar unos cuantos valores descriptivos a nuestro
Servicio Web XML:
La sintaxis para aplicar el atributo WebService a una definicin de una clase es un poquito diferente en
Visual Basic .NET y C#
[VB]
<WebService(Name:="MyService", Description:="This is a description.",
Namespace:="http://www.dotnetjunkies.com/")> _
Public Class MyWebServiceClass
'...
End Class
[C#]
[WebService(Name="MyService", Description="This is a description.",
Namespace="http://www.dotnetjunkies.com/")]
public class MyWebServiceClass{
//...
}
El atributo WebService solo puede ser aplicado a una clase declarada usando la palabra clave public.
Derivando de System.Web.Services.WebService
La clase que se expone como un Servicio Web XML puede (opcionalmente), derivar de la clase
System.Web.Services.WebService, como se muestra a continuacin:
[WebService()]
public class MyService : System.Web.Services.WebService
{
//Web methods go here
}
El derivar de la clase WebService permite acceder a las funcionalidades y objetos ms comunes de
ASP.NET, como por ejemplo Aplication Session, User y Context. Esto permite la gestin del estado en el
Servicio Web XML, en todo el ciclo de vida de la aplicacin Web o en una sesin particular. No es
necesario el derivar de la clase WebService, pero podemos si queremos aadir funcionalidades.
El atributo WebMethod
A diferencia de WebService, el atributo WebMethod, no es opcional, todos los mtodos que vayan a ser
expuestos como mtodos que se usarn en el Servicio Web XML, DEBEN tener el atributo WebMethod, y
deben ser declarados usando la palabra clave public. El atributo WebMethod indica al .NET Framework
que el mtodo especificado a continuacin debe ser accesible va protocolos estndar de Internet.
As pues, como el mtodo del Servicio Web (tambin mtodo Web), debe ser accesible usando protocolos
estndar de Internet, el mtodo Web debe ser definido como public, indicando que es accesible desde
fuera de la clase padre. Podemos crear mtodos protected, internal o private, en una clase de un
Servicio Web XML, pero no pueden ser expuestos como mtodos Web.
El atributo WebMethod expone las siguientes propiedades:
BufferResponse Especifica si la respuesta de este mtodo Web debe meterse en el buffer. Por
defecto es true.
CacheDuration Especifica el nmero de segundos que la respuesta del mtodo Web debe ser
almacenada en cach.
Description Descripcin breve de la funcionalidad del mtodo Web.
EnableSession Configura si el control de estado con Session est activado para el mtodo Web.
Por defecto es false.
MessageName Especifica el nombre usado por el mtodo Web. Por defecto el mtodo Web
tendr el mismo nombre que el nombre del mtodo. Usando el atributo MessageName podemos
usar alias para los mtodos web. Esto es particularmente til cuando se construyen mtodos
web sobrecargados el atributo MessageName nos permite utilizar diferentes nombres para los
mtodos sobrecargados.
TransactionOption Especifica el soporte a los servicios empresariales de transacciones
disponibles para el mtodo Web.
La sintaxis para VisualBasic .NET y C# sigue la misma pauta que el atributo WebService:
[VB]
<WebMethod(Description:="This is a description.")> _
Public Function MyWebMethod() As String
Return "FooBar"
End Function
[C#]
[WebMethod(Description="This is a description.")]
public String MyWebMethod(){
return "FooBar";
}
El producto final
Una vez que la clase del Servicio Web XML esta escrita, podemos buscar el archive .asmx y comprobar
los mtodos Web que hemos expuesto. Si la clase est en un archivo separado (*.vb, *.cs, etc.), entonces
la clase necesita ser compilada y el ensamblado (assembly), debe ser situado en el directorio /bin. Si la
clase del Servicio Web XML es definida en el archivo .asmx, entonces no se requiere compilacin el
Servicio Web XML ser compilado por el compilador JIT .
Qu es tempuri.org?
En la primera parte de la pgina de comprobacin del Servicio Web XML, bajo la lista de los enlaces a los
mtodos Web, hay una seccin describiendo http://tempuri.org . Esto es un espacio de nombres XML
temporal que se asigna por defecto a todos los Servicios Web XML creados usando el .NET Framework, si
no se especific uno al crearlo. El espacio de nombres XML se usa para identificar unvocamente dos o
ms Servicios Web XML con el mismo nombre de clase. Podemos especificar el espacio de nombres del
servicio Web XML en el atributo WebService. Una de las propiedades de la clase WebServiceAttribute es
Namespace. Para definir por ejemplo http://www.dotnetjunkies.com como el espacio de nombres para
este Servicio Web XML, tenemos que modificar el atributo constructor WebService:
Pasos
Hacemos clic sobre Inicio, luego
ejecutar y escribimos notepad.
Haciendo clic sobre Abrir o pulsando la
tecla Enter se abre el Notepad
Aadimos:
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
Guardamos de nuevo.
Aadimos la directiva
[WebService(Namespace =
"http://tempuri.org/")]
Exponemos la clase como pblica
public class WebService :
System.Web.Services.WebService { }
Un Servicio Web XML puede estar compuesto por uno o ms
mtodos, expuestos con la palara WebMethod. En este caso
podemos utilizar uno muy conocido, el famoso Hola Mundo,
bueno no, vamos a utilizar otro, un poco ms complejo, que
admita algn parmetro, y como la cosa va de guerra de
barcosHacemos uno muy chorra
Import MiServicio;
var NumeroPrimo : boolean;