domingo, 9 de enero de 2011

Consumiendo un servicio WCF de tipo netTcpBinding

Como primer post comentare acerca de  cómo consumir un servicio WCF desde un Console Application, les comentare que no fue nada fácil hacerlo ya que una conexión vía tcp requiere de unas pequeñas secciones de configuración en el .config de la aplicación pero después de muchos intentos ante la computadora y de cierta información encontrada en "san google" acá les doy unos tips, lo primero que vamos hacer es crear una Biblioteca de clases en C# llamado WCFBusiness con una clase "Business" de tipo entidad, una interface "IBusiness" y una implementación de la  interface "IBusiness" llamado  "BusinessProcess"
.

 el proyecto debe de hacer referencia a System.ServiceModel 4.0





Luego vamos a crear un proyecto web llamado WCF dentro del sitio Localhost. Posteriormente eliminaremos el appCode y cambiaremos la referencia del archivo Service.svc

en el archivo Service.svc ingresamos el siguiente código para hacer referencia a nuestro proyecto WCFBusiness.

<%@ ServiceHost Language="C#" Debug="true" Service="WCFBusiness.BusinessProcess"  %>

Luego ejecutamos el ya conocido editor de configuración de servicios WCF  o sino ingresamos el siguiente código en el app.config  (más simple no puede ser)

<configuration>
  <system.web>
    <compilation debug="false" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="MyBehavior" name="WCFBusiness.BusinessProcess">
        <clear />
        <endpoint binding="netTcpBinding" bindingConfiguration="portSharingBinding"
          name="MyServiceEndpoint" contract="WCFBusiness.IBusiness"
          listenUriMode="Explicit">
        </endpoint>
        <endpoint address="mex" binding="mexTcpBinding" name="MyServiceMexTcpBidingEndpoint"
        contract="IMetadataExchange" listenUriMode="Explicit">
        </endpoint>       
        <host>
          <baseAddresses>    
            <add baseAddress="net.tcp://localhost:808/WCF/Service.svc" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <netTcpBinding>
        <binding name="portSharingBinding" portSharingEnabled="true" maxReceivedMessageSize="512000">
          <readerQuotas maxNameTableCharCount="163840" />
          <security mode="None"/>
        </binding>
      </netTcpBinding>
    </bindings>
  </system.serviceModel>
</configuration>

Ahora tenemos que configurar net.tcp en nuestro sitio web.  Para configurar hay que hacer los siguientes pasos:

1) Abrir IIS 7.0 (inetmgr)
2) En la sección enlaces agregar un enlace de tipo net.tcp y en la información del enlace agregar el puerto correspondiente 808:*
3) en la sección de la configuración avanzada editar el protocolo habilitado http: por http,net.tcp
4) reiniciar IIS.

Visualizamos nuestro servicio:

Ahora para probar nuestro wcf vía tcp a través de un console application debemos de ir a otra máquina y hacer referencia a nuestro servicio (no sé por qué no se puede ejecutar desde mi propia máquina... les debo está explicación para un próximo post),

Vamos a crear un console application que haga referencia a nuestro WCF para ello usaremos la consola de visual studio 2010 "VC" y crearemos nuestro appconfig con la siguiente sentencia

svcutil.exe net.tcp://PC-SERVIDOR/WCF/Service.svc
 
esto nos generara la clase  BusinessProcess.cs y el AppConfig dentro del directorio 
C:\Program Files\Microsoft Visual Studio 10.0\VC\

Luego lo copiamos a nuestro proyecto y en el archivo Program.cs, ingresamos el siguiente código:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WCFBusiness;
namespace ConsoleBusiness
{
    class Program
    {
        static void Main(string[] args)
        {
            using (BusinessClient Client = new BusinessClient())
            {
                Client.Open();
                Business obj_Bussines = new Business();
                obj_Bussines.Apellidos  ="Ruiz Bautista";
                obj_Bussines.Nombres = "Christian Angel";

                Console.WriteLine(Client.Datos(obj_Bussines));
                Client.Close();
                Console.ReadLine();
            }
        }
    }
}



y eso es todo... simple y sencillo xD





No hay comentarios:

Publicar un comentario