Publicado el 6 de Mayo del 2020
546 visualizaciones desde el 6 de Mayo del 2020
198,9 KB
23 paginas
Creado hace 14a (04/03/2011)
Servicios Web y RMI
Servicios Web y RMI
Pedro J. Muñoz Merino
Pedro J. Muñoz Merino
http://www.it.uc3m.es/pedmume/
http://www.it.uc3m.es/pedmume/
Servicios Web: Concepto
● Uso más habitual de un servidor es dar una respuesta al
usuario de una determinada página (PHP, ASP, J2EE…).
Las páginas están disponibles para los usuarios
● Otro uso es el de proporcionar disponibles una serie de
métodos que son accesibles para ser llamados desde
otras máquinas de manera remota. Es el concepto de
otras máquinas de manera remota. Es el concepto de
Servicios Web. Los métodos remotos están disponibles
para las máquinas
― Computación distribuida. En lugar de tener todos los métodos
locales, se pueden invocar métodos remotos en servidores que
ofrecen esos servicios
● Los Servicios Web ofrecen unos métodos con una serie de
parámetros y devuelven una salida
Pedro J. Muñoz Merino
Diseño de Aplicaciones Telemáticas
2
Servicios Web: Ventajas
● El tener los métodos de manera remota, puede parecer
inicialmente un problema, pero presenta una serie de
ventajas:
― Los cambios en los métodos de los Servicios Web son
transparentes para el programador. El programador sólo se debe
ocupar de conocer la interfaz al método del Servicio Web
― Se pueden implementar funcionalidades nuevas que no es
posible mediante la programación local, aprovechando la
potencia de la Web. Por ejemplo un buscador de páginas web
― El almacenamiento y ejecución de los programas no recae en
una sola máquina sino que está repartida por todas las máquinas
de Internet de las que se hace uso. Computación distribuida
― Permiten interconexión de clientes y máquinas remotas con
independencia de los lenguajes de programación de ambos
Pedro J. Muñoz Merino
Diseño de Aplicaciones Telemáticas
3
Servicios Web: Visión General
● Servicios Web: Visión General
― Descripción de cuales son los parámetros de entrada y de salida,
los tipos de mensajes intercambiados, etc. de forma que el
servicio Web quede descrito. Por ejemplo WSDL. Tecnología en
XML para dicha descripción
― Mensajes intercambiados en los protocolos para transferir la
información y hacer las peticiones y respuestas. Por ejemplo
información y hacer las peticiones y respuestas. Por ejemplo
SOAP. Tecnología en XML para dicha descripción
― APIs y artilugios de los clientes y los servidores para dejar
disponibles esos métodos y poder llamarlos. Dependerá del
lenguaje de programación. Por ejemplo AXIS como librería en
JAVA
Pedro J. Muñoz Merino
Diseño de Aplicaciones Telemáticas
4
Servicios Web: WSDL
● Fichero XML con estas etiquetas:
― definitions: Elemento raíz
― types: Los tipos de datos que se van a transmitir
― message: Los mensajes que se van a transmitir. Pueden ir
diferentes elementos part, que indican parámetros de entrada y
salida, diciendo su tipo de datos
salida, diciendo su tipo de datos
― portType: Las operaciones o funciones que serán soportados.
Pueden ir elementos input y output que referencian a los
mensajes definidos, para ver cada secuencia de operaciones
― binding: Cómo se van a transmitir los mensajes y detalles SOAP
― service: Dónde está localizado el servicio
Pedro J. Muñoz Merino
Diseño de Aplicaciones Telemáticas
5
Ejemplo WSDL (I)
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="urn:Datos" xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="urn:Datos" xmlns:intf="urn:Datos"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:message name="setResponse">
<wsdl:part name="setReturn" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="getRequest">
<wsdl:message name="getRequest">
<wsdl:part name="in0" type="xsd:string"/>
<wsdl:part name="in1" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="getResponse">
<wsdl:part name="getReturn" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="setRequest">
<wsdl:part name="in0" type="xsd:string"/>
<wsdl:part name="in1" type="xsd:string"/>
<wsdl:part name="in2" type="xsd:string"/>
</wsdl:message>
Pedro J. Muñoz Merino
Diseño de Aplicaciones Telemáticas
6
Ejemplo WSDL (II)
<wsdl:portType name="Datos">
<wsdl:operation name="get" parameterOrder="in0 in1">
<wsdl:input message="impl:getRequest" name="getRequest"/>
<wsdl:output message="impl:getResponse" name="getResponse"/>
</wsdl:operation>
<wsdl:operation name="set" parameterOrder="in0 in1 in2">
<wsdl:input message="impl:setRequest" name="setRequest"/>
<wsdl:input message="impl:setRequest" name="setRequest"/>
<wsdl:output message="impl:setResponse" name="setResponse"/>
</wsdl:operation>
</wsdl:portType>
Pedro J. Muñoz Merino
Diseño de Aplicaciones Telemáticas
7
Ejemplo WSDL (III)
<wsdl:binding name="DatosSoapBinding" type="impl:Datos">
<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="get">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="getRequest">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:Datos"
use="encoded"/>
</wsdl:input>
<wsdl:output name="getResponse">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:Datos"
use="encoded"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="set">
<wsdlsoap:operation soapAction=""/>
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="setRequest">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:Datos"
use="encoded"/>
</wsdl:input>
<wsdl:output name="setResponse">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:Datos"
use="encoded"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="DatosService">
<wsdl:port binding="impl:DatosSoapBinding" name="Datos">
<wsdlsoap:address location="http://localhost:8080/axis/services/Datos"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Pedro J. Muñoz Merino
Diseño de Aplicaciones Telemáticas
8
SOAP: Introducción
● SOAP: Simple Object Access Protocol
● Es un formato de transmisión de mensajes entre
Servicios Web
● En los Servicios Web, SOAP suele ir sobre HTTP, para
también puede ir con otros protocolos
Pedro J. Muñoz Merino
Diseño de Aplicaciones Telemáticas
9
SOAP: Introducción
● Partes de un mensaje SOAP
― envelope: Elemento raíz
― header: Es opcional, no tiene porque ir información de la
aplicación. Se pueden poner atributos que deciden quien debe
procesar dicha información: actor, mustUnderstand, relay
― body: Tiene contenido de la aplicación que puede ser referido a
― body: Tiene contenido de la aplicación que puede ser referido a
la invocación, respuesta, notificación o error
● RPC: Envío de parámetros y respuesta de resultados
Pedro J. Muñoz Merino
Diseño de Aplicaciones Telemáticas
10
Ejemplo SOAP (I)
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope
/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<get
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/
encoding/">
<permiso
xsi:type="xsd:string">escritura</permiso>
<parametro xsi:type="xsd:string">IP</parametro>
</get>
</soapenv:Body>
</soapenv:Envelope>
Pedro J. Muñoz Merino
Diseño de Aplicaciones Telemáticas
11
Ejemplo Servidor con AXIS y JWS (I)
import java.util.HashMap;
import java.util.Map;
public class Datos {
private static HashMap datos = inicializar();
private String dato=null;
public static HashMap inicializar() {
HashMap datosini= new HashMap();
datosini.put("OS", "Windows 98");
datosini.put("IP", "152.27.3.1");
datosini.put("Name", "teclado");
datosini.put("Phone", "916545949");
datosini.put("M1", " ");
datosini.put("M2", " ");
datosini.put("M3", " ");
datosini.put("M3", " ");
datosini.put("M4", " ");
return(datosini);
}
public String get(String clave, String parametro) {
if (!clave.equals("lectura")&&!clave.equals("escritura")){
dato="La clave suministrada no es correcta.";
return(dato);
}
else{
if (parametro == null || parametro.length() == 0
|| (dato = (String) datos.get(parametro)) == null) {
dato = "No existe dicho parámetro en la base de datos.";
return (dato);
}
}
return (parametro+": "+dato);
}
Pedro J. Muñoz Merino
Diseño de Aplicaciones Telemáticas
12
Ejemplo Servidor con AXIS y JWS (II)
public String set(String clave, String parametro, String valor) {
if (!clave.equals("escritura")){
dato="La clave suministrada no es correcta o sólo proporciona permiso de lectura.";
return(dato);
}
else{
if (parametro == null || parametro.length() == 0
|| (dato = (String) datos.get(parametro)) == null) {
dato = "No existe dicho pará
Comentarios de: Servicios Web y RMI (0)
No hay comentarios