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