Add Guía para generar y consumir el WSDL del servicio
parent
b6be281f59
commit
8e8c21538f
1 changed files with 305 additions and 0 deletions
305
Gu%C3%ADa-para-generar-y-consumir-el-WSDL-del-servicio.md
Normal file
305
Gu%C3%ADa-para-generar-y-consumir-el-WSDL-del-servicio.md
Normal file
|
@ -0,0 +1,305 @@
|
|||
# Guía para generar y consumir el WSDL del servicio
|
||||
|
||||
Este documento describe cómo acceder al WSDL del servicio de simulación de documentos digitalizados y cómo consumirlo desde diferentes plataformas.
|
||||
|
||||
## ¿Qué es WSDL?
|
||||
|
||||
WSDL (Web Services Description Language) es un formato XML que describe la funcionalidad ofrecida por un servicio web SOAP. Permite a los clientes entender automáticamente cómo interactuar con el servicio.
|
||||
|
||||
## Acceso al WSDL
|
||||
|
||||
Una vez que el servicio está en ejecución, el WSDL está disponible en las siguientes URLs:
|
||||
|
||||
- Para el endpoint con DataContractSerializer:
|
||||
```
|
||||
http://localhost:5050/WsServicioDeInformacion.svc?wsdl
|
||||
```
|
||||
|
||||
- Para el endpoint con XmlSerializer:
|
||||
```
|
||||
http://localhost:5050/WsServicioDeInformacion.asmx?wsdl
|
||||
```
|
||||
|
||||
En un entorno de producción, la URL sería similar a la siguiente:
|
||||
```
|
||||
https://dnic.mz.uy/WsServicioDeInformacion.asmx?wsdl
|
||||
```
|
||||
|
||||
## Consumo del servicio SOAP
|
||||
|
||||
Existen múltiples formas de consumir un servicio SOAP, dependiendo de la plataforma y el lenguaje de programación.
|
||||
|
||||
### Usando SoapUI (herramienta de pruebas)
|
||||
|
||||
1. Descarga e instala [SoapUI](https://www.soapui.org/)
|
||||
2. Crea un nuevo proyecto SOAP
|
||||
3. En la URL del WSDL, introduce la URL del servicio (ej. `http://localhost:5050/WsServicioDeInformacion.asmx?wsdl`)
|
||||
4. SoapUI generará automáticamente las solicitudes de ejemplo para cada operación
|
||||
|
||||
### Usando Postman
|
||||
|
||||
1. Abre Postman y crea una nueva solicitud
|
||||
2. Establece el método a POST
|
||||
3. Introduce la URL del servicio (ej. `http://localhost:5050/WsServicioDeInformacion.asmx`)
|
||||
4. En Headers, agrega `Content-Type: text/xml`
|
||||
5. En el cuerpo, coloca tu solicitud SOAP
|
||||
|
||||
### Ejemplos de solicitud y respuesta
|
||||
|
||||
#### Ejemplo de solicitud SOAP
|
||||
|
||||
```xml
|
||||
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
|
||||
<soap:Body>
|
||||
<ObtDocDigitalizado xmlns="http://dnic.gub.uy/">
|
||||
<param>
|
||||
<NroDocumento>49746161</NroDocumento>
|
||||
<TipoDocumento>DO</TipoDocumento>
|
||||
<NroSerie>ABC123456</NroSerie>
|
||||
<NroIdentificacion>123456</NroIdentificacion>
|
||||
<Organismo>ServiPuntos</Organismo>
|
||||
<ClaveAcceso1>Clave123</ClaveAcceso1>
|
||||
</param>
|
||||
</ObtDocDigitalizado>
|
||||
</soap:Body>
|
||||
</soap:Envelope>
|
||||
```
|
||||
|
||||
#### Ejemplo de respuesta SOAP (éxito)
|
||||
|
||||
```xml
|
||||
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<s:Body>
|
||||
<ObtDocDigitalizadoResponse xmlns="http://dnic.gub.uy/">
|
||||
<ObtDocDigitalizadoResult>
|
||||
<Persona>
|
||||
<CodTipoDocumento>DO</CodTipoDocumento>
|
||||
<NroDocumento>49746161</NroDocumento>
|
||||
<Nombre1>Jimena</Nombre1>
|
||||
<Nombre2>Marta</Nombre2>
|
||||
<PrimerApellido>Moreira</PrimerApellido>
|
||||
<SegundoApellido>Morales</SegundoApellido>
|
||||
<Sexo>2</Sexo>
|
||||
<FechaNacimiento>1963-10-28</FechaNacimiento>
|
||||
<CodNacionalidad>2</CodNacionalidad>
|
||||
<NombreEnCedula>Jimena Marta Moreira Morales</NombreEnCedula>
|
||||
<IdSolicitud>88726</IdSolicitud>
|
||||
<IdRespuesta>77134</IdRespuesta>
|
||||
</Persona>
|
||||
<Imagenes>
|
||||
<ImagenDigital>
|
||||
<Foto>No Implementado...</Foto>
|
||||
<LargoBytes>254</LargoBytes>
|
||||
<TipoImagen>1</TipoImagen>
|
||||
</ImagenDigital>
|
||||
<ImagenDigital>
|
||||
<Foto>No Implementado...</Foto>
|
||||
<LargoBytes>282</LargoBytes>
|
||||
<TipoImagen>2</TipoImagen>
|
||||
</ImagenDigital>
|
||||
</Imagenes>
|
||||
</ObtDocDigitalizadoResult>
|
||||
</ObtDocDigitalizadoResponse>
|
||||
</s:Body>
|
||||
</s:Envelope>
|
||||
```
|
||||
|
||||
#### Ejemplo de respuesta SOAP (error)
|
||||
|
||||
```xml
|
||||
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<s:Body>
|
||||
<ObtDocDigitalizadoResponse xmlns="http://dnic.gub.uy/">
|
||||
<ObtDocDigitalizadoResult>
|
||||
<Errores>
|
||||
<Mensaje>
|
||||
<CodMensaje>1001</CodMensaje>
|
||||
<Descripcion>Persona inexistente en la base de datos</Descripcion>
|
||||
<DatoExtra>Trace</DatoExtra>
|
||||
</Mensaje>
|
||||
</Errores>
|
||||
</ObtDocDigitalizadoResult>
|
||||
</ObtDocDigitalizadoResponse>
|
||||
</s:Body>
|
||||
</s:Envelope>
|
||||
```
|
||||
|
||||
## Consumo del servicio desde diferentes lenguajes
|
||||
|
||||
### C#
|
||||
|
||||
```csharp
|
||||
// Agregar referencia al servicio:
|
||||
// dotnet add package System.ServiceModel.Http
|
||||
// dotnet add package System.ServiceModel.Primitives
|
||||
|
||||
using System;
|
||||
using System.ServiceModel;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
// Generar cliente del servicio usando:
|
||||
// dotnet tool install --global dotnet-svcutil
|
||||
// dotnet-svcutil http://localhost:5050/WsServicioDeInformacion.asmx?wsdl
|
||||
|
||||
class Program
|
||||
{
|
||||
static async Task Main()
|
||||
{
|
||||
// Crear el cliente
|
||||
var binding = new BasicHttpBinding();
|
||||
var endpoint = new EndpointAddress("http://localhost:5050/WsServicioDeInformacion.asmx");
|
||||
var client = new WsServicioDeInformacionClient(binding, endpoint);
|
||||
|
||||
// Crear parámetros
|
||||
var param = new ParamObtDocDigitalizado
|
||||
{
|
||||
NroDocumento = "49746161",
|
||||
TipoDocumento = "DO",
|
||||
NroSerie = "ABC123456",
|
||||
Organismo = "ServiPuntos",
|
||||
ClaveAcceso1 = "Clave123"
|
||||
};
|
||||
|
||||
// Llamar al servicio
|
||||
var result = await client.ObtDocDigitalizadoAsync(param);
|
||||
|
||||
// Procesar resultado
|
||||
if (result.Errores != null && result.Errores.Length > 0)
|
||||
{
|
||||
Console.WriteLine($"Error: {result.Errores[0].Descripcion}");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine($"Nombre: {result.Persona.Nombre1} {result.Persona.PrimerApellido}");
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Java
|
||||
|
||||
```java
|
||||
// Usar JAX-WS o wsimport para generar clases cliente
|
||||
// wsimport -keep -p uy.gub.dnic http://localhost:5050/WsServicioDeInformacion.asmx?wsdl
|
||||
|
||||
import uy.gub.dnic.*;
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
// Crear el servicio y el puerto
|
||||
WsServicioDeInformacion service = new WsServicioDeInformacion();
|
||||
IWsServicioDeInformacion port = service.getBasicHttpBindingIWsServicioDeInformacion();
|
||||
|
||||
// Crear parámetros
|
||||
ParamObtDocDigitalizado param = new ParamObtDocDigitalizado();
|
||||
param.setNroDocumento("49746161");
|
||||
param.setTipoDocumento("DO");
|
||||
param.setNroSerie("ABC123456");
|
||||
param.setOrganismo("ServiPuntos");
|
||||
param.setClaveAcceso1("Clave123");
|
||||
|
||||
// Llamar al servicio
|
||||
ResultObtDocDigitalizado result = port.obtDocDigitalizado(param);
|
||||
|
||||
// Procesar resultado
|
||||
if (result.getErrores() != null && !result.getErrores().getMensaje().isEmpty()) {
|
||||
System.out.println("Error: " + result.getErrores().getMensaje().get(0).getDescripcion());
|
||||
} else {
|
||||
System.out.println("Nombre: " + result.getPersona().getNombre1() + " " +
|
||||
result.getPersona().getPrimerApellido());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Python (con zeep)
|
||||
|
||||
```python
|
||||
from zeep import Client
|
||||
|
||||
# Crear cliente SOAP
|
||||
client = Client('http://localhost:5050/WsServicioDeInformacion.asmx?wsdl')
|
||||
|
||||
# Preparar parámetros
|
||||
param = {
|
||||
'NroDocumento': '49746161',
|
||||
'TipoDocumento': 'DO',
|
||||
'NroSerie': 'ABC123456',
|
||||
'Organismo': 'ServiPuntos',
|
||||
'ClaveAcceso1': 'Clave123'
|
||||
}
|
||||
|
||||
# Llamar al servicio
|
||||
result = client.service.ObtDocDigitalizado(param)
|
||||
|
||||
# Procesar resultado
|
||||
if hasattr(result, 'Errores') and result.Errores:
|
||||
print(f"Error: {result.Errores[0].Descripcion}")
|
||||
else:
|
||||
print(f"Nombre: {result.Persona.Nombre1} {result.Persona.PrimerApellido}")
|
||||
```
|
||||
|
||||
### JavaScript/TypeScript (con node-soap)
|
||||
|
||||
```javascript
|
||||
const soap = require('soap');
|
||||
const url = 'http://localhost:5050/WsServicioDeInformacion.asmx?wsdl';
|
||||
|
||||
// Crear cliente SOAP
|
||||
soap.createClient(url, function(err, client) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return;
|
||||
}
|
||||
|
||||
// Preparar parámetros
|
||||
const param = {
|
||||
NroDocumento: '49746161',
|
||||
TipoDocumento: 'DO',
|
||||
NroSerie: 'ABC123456',
|
||||
Organismo: 'ServiPuntos',
|
||||
ClaveAcceso1: 'Clave123'
|
||||
};
|
||||
|
||||
// Llamar al servicio
|
||||
client.ObtDocDigitalizado({ param }, function(err, result) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
return;
|
||||
}
|
||||
|
||||
const response = result.ObtDocDigitalizadoResult;
|
||||
|
||||
// Procesar resultado
|
||||
if (response.Errores) {
|
||||
console.log(`Error: ${response.Errores.Mensaje.Descripcion}`);
|
||||
} else {
|
||||
console.log(`Nombre: ${response.Persona.Nombre1} ${response.Persona.PrimerApellido}`);
|
||||
}
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
## Manipular el CI para obtener diferentes resultados
|
||||
|
||||
Como se explicó en el README principal, los primeros dígitos de la cédula determinan el comportamiento del servicio:
|
||||
|
||||
| Primeros dos dígitos | Resultado |
|
||||
|----------------------|-----------|
|
||||
| 11 | Error - Persona inexistente |
|
||||
| 12 | Error - Límite de consultas excedido |
|
||||
| 13 | Error - Número de cédula anulado |
|
||||
| 14 | Advertencia - Datos de persona a regularizar |
|
||||
| 15 | Advertencia - Documento hurtado o extraviado |
|
||||
|
||||
Además, los últimos dos dígitos determinan la edad de la persona. Por ejemplo:
|
||||
|
||||
- CI terminada en "18": Persona de 18 años
|
||||
- CI terminada en "25": Persona de 25 años
|
||||
- CI terminada en "65": Persona de 65 años
|
||||
|
||||
Para probar diferentes escenarios, simplemente modifique el número de cédula en la solicitud SOAP.Welcome to the Wiki.
|
Loading…
Add table
Add a link
Reference in a new issue