Sei sulla pagina 1di 21

Simple Object Access

Protocol

Yonathan Ledo 01-34033


Christian de Sousa 01-33770
Definici
n
SOAP es un protocolo que define un estndar para el intercambio de mensajes,
basados en XML, a travs de una red de computadoras, empleando
frecuentemente como medio el protocolo HTTP. Las primeras versiones fueron
diseadas entre otros por Microsoft e IBM, y actualmente se encuentra bajo el
auspicio de la World Wide Web Consortium (W3C).

SOAP se origin alrededor del ao 1998 y se convierte en el sucesor de


RPC-XML. Por este motivo el patrn de comunicacin ms empleado por SOAP
es el RPC.

SOAP hace uso de la capa de aplicacin del modelo TPC/IP como protocolo de
transporte, por ende, SOAP es capaz de funcionar sobre cualquier protocolo de
Internet, aunque el ms popular es HTTP(S), y tambin el SMTP (invocacin de
procesos de forma asncrona ).
Definici
n
Definici
n
Definici
n
Estructura de un mensaje SOAP
El encabezado es opcional, proporciona un
mecanismo de control para el envo de
directrices o informacin contextual sobre el
procesamiento del mensaje

El cuerpo del mensaje es obligatorio, y aqu es


donde realmente se aloja la informacin que se
transporta de un extremo a otro.
Definici
n
WebServices

Un WebService es un artefacto de software


que ha sido diseado para dar soporte a la
interaccin entre mquinas brindando
interoperabilidad. Los servicios web como tal
son APIs que se acceden a travs de redes
como Internet y cuyos mtodos o
procedimientos se ejecutan de forma remota
en el sistema que hospeda el servicio.
WebServices
Implementaciones:

RPC: invocacin a mtodos remotos. Se basa en Web Service


Definition Language ( WSDL ), siendo la unidad bsica una
operacin

SOA: Arquitectura Orientada a Servicios, la unidad bsica de


comunicacin es el envo de mensajes. Ms reciente y publicitado.

REST: (Representational State Transfer ) menos difundido


Implementacion
es
Axis y el servidor Jakarta Tomcat (de Apache)
ColdFusion MX de Macromedia
Java Web Services Development Pack (JWSDP) de Sun
Microsystems (basado en Jakarta Tomcat)
Microsoft .NET
Novell exteNd (basado en la plataforma J2EE)
WebLogic
WebSphere
Zope es un servidor de aplicaciones desarrollado en Python
Mono
Ventajas
No esta asociado a ningn lenguaje
No esta asociado fuertemente a un protocolo de transporte
Permite la interoperabilidad
Aprovecha estndares existentes
El uso de XML facilita la legibilidad
Permite la comunicacin con objetos JB, EJB y COM/COM+
Evita las restricciones que imponen los firewalls sobre otros modelos como
CORBA, RMI , GIOP/IIOP o DCOM
El uso de CORBA o RMI implica hacer marshalling / unmarshalling por lo
que en el caso particular de CORBA, tanto cliente como servidor, deben
emplear el mismo ORB y en el caso de RMI estar desarrollados en JAVA.
Desventajas
El estndar define el uso de mecanismos no de polticas
Falta de interoperabilidad debido a que el estndar se encuentra lleno de
ambigedades
Algunas implementaciones limita la cantidad de datos a enviar
Es posible la transmisin excesiva de datos consecuencia del uso de XML
Mas lento e ineficiente que CORBA o RMI (formato binario)
Como usa HTTP como base para la comunicacin, la misma es en una sola va y
no se realiza manejo de estado (stateless)
Sobrecarga del puerto 80 Que pasa si se propaga un virus a travs de SOAP?
No se puede agregar informacin para el procesamiento de los datos
Otras
XML-RPC
Alternativas
Acercamiento minimalista al problema del paso de mensajes
Protocolo bastante bsico para la comunicacin
Bases de SOAP

REST
Protocolos de HTTP para hacer aplicaciones
Peticiones de bajo nivel
Bastante bsico

JSON-RPC
Comunicacin bidireccional
El orden de respuesta puede no ser el mismo que el orden de llegada
CORBA Vs SOAP

SOAP el programador debe crear los mensajes (bajo nivel) en CORBA son
llamadas a objetos

SOAP no esta atado al paradigma de Objetos

SOAP no especifica un mapeo o interfaz independiente (dependencia de la


librera)

Tanto SOAP como CORBA permiten RPC

SOAP es dbilmente acoplado

SOAP no posee Chequeo de Tipos a Tiempo de compilacin


CORBA Vs SOAP
<esd:CType name="EchoData">
<esd:item name="aLong" type="xsd:int" builtin="true" array="false" inout="false"/>
<esd:item name="aBool" type="xsd:boolean" builtin="true" array="false" inout="false"/>
<esd:item name="aString" type="xsd:string" builtin="true" array="false" inout="false"/>
</esd:CType>
<esd:Method name="getData">
<esd:InParam name="GetDataRequest">
<esd:item name="l" type="xsd:int" builtin="true" array="false" inout="false"/>
<esd:item name="b" type="xsd:boolean" builtin="true" array="false" inout="false"/>
<esd:item name="s" type="xsd:string" builtin="true" array="false" inout="false"/>
</esd:InParam>
<esd:OutParam name="GetDataResponse">
<esd:item name="return" type="typens:EchoData" builtin="false" array="false inout="false"/>
</esd:OutParam>
</esd:Method>

struct EchoData {
long aLong;
boolean aBool;
string aString;
};
EchoData getData( in long l, in boolean b, in string s );
CORBA Vs SOAP
URL url = new URL("http://localhost:8080/apache-soap/servlet/rpcrouter");
Call call = new Call();
call.setTargetObjectURI("urn:Hello");
call.setMethodName("sayHelloTo");
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
Vector params = new Vector();
params.addElement(new Parameter("name", String.class, "Mark", null));
call.setParams(params);
Response resp = null;
try {
resp = call.invoke(url, "");
if ( !resp.generatedFault() ) {
Parameter ret = resp.getReturnValue();
Object value = ret.getValue();
System.out.println(value);
}
else {
Fault fault = resp.getFault();
System.err.println("Generated fault!");
}
}
catch (Exception e) {
}
CORBA Vs SOAP

try {
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null);
org.omg.CORBA.Object rootObj = orb.resolve_initial_references("NameService");
NamingContextExt root = NamingContextExtHelper.narrow(rootObj);
org.omg.CORBA.Object object = root.resolve(root.to_name("AcmeMyService"));
MyService myService = MyServiceHelper.narrow(object);
int ret = myService.sayHelloTo("Mark");
} catch (MyServiceException e) {
System.err.println("Generated fault!");
} catch (Exception e) {
e.printStackTrace();
}
Pruebas
Lenguaje Python
CORBA omniORB
SOAP ZSI
XML-RPC XMLRPClib

Technology Connect Send Receive Send 5,000 Actual Actual


time string string integers message message
(21,000 (22,000 size size
characters characters) sending sending
) 1,000 100
characters integers
Raw
sockets 0.002242 0.001377 0.001359 6.740674 2,279 85,863
CORBA 0.000734 0.004601 0.002188 1.523799 2,090 27,181
100.33721
XML-RPC 0.00704 0.082755 0.050199 9 4,026 324,989
SOAP 0.00061 0.294198 0.279341 1,324.30 4,705 380,288
Que usar? Y
Cuando?
CORBA <> SOAP CORBA/IIOP IDL y Web Service /SOAP WSDL

Para llamadas internas (complejas) CORBA/IIOP y para


llamadas externas (simples) SOAP

Cuando no importa la seguridad SOAP

Cuando no importa el contexto de la transaccin SOAP

Cuando importa eficiencia CORBA

EN CORBA no se puede hacer debugging de los


mensajes ya que solo GIOP lo puede entender
Que usar? Y
Cuando?
SOAP es un protocolo de transporte y no puede ser usado
para manejar todos los aspectos de una arquitectura de
objetos distribuidos

CORBA posee una alta curva de aprendizaje. Es difcil


entrarle (+ costos)

Desarrollo rapido = SOAP

Ya el precio de la tecnologa no es relevante

Cosas nuevas llaman la atencin


Sobre el Futuro

CORBA inicio ligero y sencillo luego poco a


poco maduro y evoluciono formando el
complejo sistema que es hoy

WebService/SOAP tambin inicio ligero y


sencillo y poco a poco ha madurado y
evolucionando.
Preguntas?

Gracias por su atencin

Potrebbero piacerti anche