Inicio  |  Timbrado  |  2.3. WS Timbrar Ejemplos  |  Visual Studio 2010
La LCO fue actualizada por última vez el 21/nov/2024

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 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 poder 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 sección 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 producción, 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);
}
    

Las líneas 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/>

Mensaje de error:
"No se encontró el elemento de extremo con el nombre 'TimbradoEndpoint_TESTING' y el contrato 'SolucionFactible.TimbradoPortType' en la sección de configuración de cliente de ServiceModel ..."

También se puede mostrar como:
"Could not find endpoint element with name 'TimbradoEndpoint_TESTING' and contract 'SolucionFactible.TimbradoPortType' in the ServiceModel client configuration section ..."

En una Solución de Visual Studio con varios proyectos, se debe asegurar de que la configuración de los endpoints exista en el App.config del proyecto que esté designado como el proyecto principal ya que este es el que se carga cuando se inicia la aplicación.

Mensaje de error:
"Se ha excedido la cuota de tamaño máximo de los mensajes entrantes (65536)."

Para aumentar la cuota, use la propiedad MaxReceivedMessageSize en el elemento de enlace correspondiente, o bien, agregar un nuevo nodo webHttpBinding que aplique para todos los bindings

<webHttpBinding>
<binding maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" />
</webHttpBinding>

Datos de contacto
comments powered by Disqus