Solución Factible Home
Login
Solución Factible®:Integration Center [SF:IC]
Buscar en SF:IC
 
  • Home
  • Emisión
  • Timbrado
  • Recepción
  • Autofactura
  • Validador CFD
Inicio  |  Emisión  |  Visual Studio 2010
  • Home
  • Emisión
  • Timbrado
  • Recepción
  • Autofactura
  • General
  • Herramientas
  • Validador CFD

Agregar Referencia a WebService en Visual Studio 2010

Consumir un WebService desde VisualStudio es muy fácil, ya que este contiene herramientas visuales para generar las clases y archivos necesarios, solo nos queda hacer unas pequeñas configuraciones para poder hacer llamadas a los servidores de de testing y el de producción desde cualquier lenguaje .NET que soporte visualStudio (C# .NET, VB .NET, etc).

Paso 1

Seleccionar el proyecto para añadir el ServiceReference.

agregar WebReference

Paso 2

Ingresar la URL y especificar el namespace para identificar los objetos.

agregar WebReference

Paso 3

Cuando se agrega la referencia se generan datos sobre el Endpoint en un archivo llamado: app.config que esta ubicado en la carpeta del proyecto en donde fué agregada la referencia, en este caso esta en: .../Visual Studio 2010/Projects/ConnectToWebService/ConnectToWebService/app.config

Este archivo debe ser modificado con el fin de podernos conectar al WebService de producción y testing solo cambiando el nombre de "Endpoint" que vamos a usar.

Abriremos el archivo app.config e identificaremos la seccion de el extracto de código que a continuación se muestra y añadiremos el texto que aparece marcado:
Nota: el namespace "com.sf.ws.Timbrado." debe ser reemplazado por el nombre que usted le dió a la hora de agregar el "ServiceReference" en el paso 2

Se han omitido algunas partes del archivo.

Descarga el archivo completo app.config

Paso 4

Una vez hecha la configuración en el archivo app.config, podemos consumir el WebService para testing y produccion, a continuación se muestra un extracto de código:

Ejemplo de código en C# .NET - WebService de Timbrado

bool produccion = false;
string prod_endpoint = "TimbradoEndpoint_PRODUCCION";
string test_endpoint = "TimbradoEndpoint_TESTING";

//Si recibe error 417 deberá descomentar la linea a continuación
//System.Net.ServicePointManager.Expect100Continue = false;

//El paquete o namespace en el que se encuentran las clases
//será el que se define al agregar la referencia al WebService,
//en este ejemplo es: com.sf.ws.Timbrado

com.sf.ws.Timbrado.TimbradoPortTypeClient portClient = null;
portClient =  (produccion)
    ? new com.sf.ws.Timbrado.TimbradoPortTypeClient(prod_endpoint)
    : portClient = new com.sf.ws.Timbrado.TimbradoPortTypeClient(test_endpoint);

try
{
    byte[] bytes = Encoding.UTF8.GetBytes(System.IO.File.ReadAllText(@"C:\Users\Solucion\Downloads\Facturas2\Factura2.xml"));
    System.Console.WriteLine("Sending request...");
    System.Console.WriteLine("EndPoint = " + portClient.Endpoint.Address);
    com.sf.ws.Timbrado.CFDICertificacion response = portClient.timbrar("testing@solucionfactible.com", "timbrado.SF.16672", bytes, false);

    System.Console.WriteLine("Información de la transacción");
    System.Console.WriteLine(response.status);
    System.Console.WriteLine(response.mensaje);
    System.Console.WriteLine("Resultados recibidos" + response.resultados.Length);
    com.sf.ws.Timbrado.CFDIResultadoCertificacion[] resultados = response.resultados;

    //Clases a usar en cancelación:
    //com.sf.ws.Timbrado.CFDICancelacion
    //com.sf.ws.Timbrado.CFDIResultadoCancelacion

}
catch (Exception ex)
{
    System.Console.WriteLine(ex.StackTrace);
}
            

Ejemplo de código en VB .NET - WebService de CFDI

        'Declarar el tamaño del arreglo con la cantidad de CFDIs que se van a enviar
        Dim cfdi(0) As com.solucionfactible.testing.cfdi.CFDI
        cfdi(0) = New com.solucionfactible.testing.cfdi.CFDI

        'Declarar el arreglo con la cantidad de conceptos que se van a agregar al CFDI
        Dim detalleCFDI(1) As com.solucionfactible.testing.cfdi.DetalleCFDI
        detalleCFDI(0) = New com.solucionfactible.testing.cfdi.DetalleCFDI
        'Construir con la información del concepto
        detalleCFDI(0).importe = 100.0
        detalleCFDI(0).concepto = "Concepto 1"
        'Para algunos campos es necesario especificar que éste lleva un valor
        detalleCfdi(0).precioUnitario = 100
        detalleCfdi(0).precioUnitarioSpecified = True
        detalleCfdi(0).cantidad = 10
        detalleCfdi(0).cantidadSpecified = True
        '...
        detalleCFDI(1) = New com.solucionfactible.testing.cfdi.DetalleCFDI
        detalleCFDI(1).importe = 150.0
        detalleCFDI(1).concepto = "Concepto 2"
        '...

        'Agregar al cfdi
        cfdi(0).detalleCFDI = detalleCFDI

Las lineas resaltadas en el código anterior hacen referencia al atributo: name="TimbradoHttpsSoap11Endpoint de cada endpoint configurado en el archivo app.config.

Solución de problemas

Mensaje de error: "unrecognized attribute decompressionenabled"

El atributo "decompressionenabled" solo es reconocido si el proyecto esta configurado para usar NetFramework4, de otra forma, solo tienes que abrir el archivo app.config y remover este atributo que deberia estar dentro de un tag: <httpsTransport/>

comments powered by Disqus