Compartir a través de


Activación TCP

Este ejemplo muestra cómo hospedar un servicio que utiliza el servicio de activación de procesos de Windows (WAS) para activar un servicio que comunica a través del protocolo de net.tcp. Este ejemplo se basa en el Ejemplo de introducción.

ms752218.note(es-es,VS.100).gifNota:
El procedimiento de instalación y las instrucciones de compilación de este ejemplo se encuentran al final de este tema.

ms752218.Important(es-es,VS.100).gif Nota:
Puede que los ejemplos ya estén instalados en su equipo. Compruebe el siguiente directorio (valor predeterminado) antes de continuar.

<InstallDrive>: \WF_WCF_Samples

Si no existe este directorio, vaya a la página de ejemplos de Windows Communication Foundation (WCF) y Windows Workflow Foundation (WF) Samples para .NET Framework 4 para descargar todos los ejemplos de WF y Windows Communication Foundation (WCF). Este ejemplo se encuentra en el siguiente directorio.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Services\Hosting\WASHost\TCPActivation

El ejemplo está compuesto por un programa (.exe) de consola de cliente y una biblioteca de servicios (.dll) hospedados en un proceso de trabajo activado por WAS. La actividad del cliente es visible en la ventana de la consola.

El servicio implementa un contrato que define un modelo de comunicación de solicitud y respuesta. La interfaz ICalculator, que expone las operaciones matemáticas (Sumar, Restar, Multiplicar y Dividir), define el contrato, tal y como se muestra en el código muestra siguiente:

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
    [OperationContract]
    double Add(double n1, double n2);
    [OperationContract]
    double Subtract(double n1, double n2);
    [OperationContract]
    double Multiply(double n1, double n2);
    [OperationContract]
    double Divide(double n1, double n2);
}

La implementación del servicio calcula y devuelve el resultado adecuado:

// Service class that implements the service contract.
public class CalculatorService : ICalculator
{
    public double Add(double n1, double n2)
    {
        return n1 + n2;
    }
    public double Subtract(double n1, double n2)
    {
        return n1 - n2;
    }
    public double Multiply(double n1, double n2)
    {
        return n1 * n2;
    }
    public double Divide(double n1, double n2)
    {
        return n1 / n2;
    }
}

El ejemplo utiliza una variante del net.tcp que enlaza con el uso compartido de un puerto TCP habilitado y con la seguridad desactivada. Si desea utilizar un enlace del TCP seguro, cambie el modo de seguridad del servidor al valor deseado y re-ejecute Svcutil.exe en el cliente para generar un archivo de configuración de cliente de actualización.

El ejemplo siguiente muestra la configuración para el servicio:

<system.serviceModel>

    <services>
      <service name="Microsoft.ServiceModel.Samples.CalculatorService"
               behaviorConfiguration="CalculatorServiceBehavior">
        <!-- This endpoint is exposed at the base address provided by host: net.tcp://localhost/servicemodelsamples/service.svc  -->
        <endpoint binding="netTcpBinding" bindingConfiguration="PortSharingBinding"
          contract="Microsoft.ServiceModel.Samples.ICalculator" />
        <!-- the mex endpoint is explosed at net.tcp://localhost/servicemodelsamples/service.svc/mex -->
        <endpoint address="mex"
                  binding="mexTcpBinding"
                  contract="IMetadataExchange" />
      </service>
    </services>
    <bindings>
      <netTcpBinding>
        <binding name="PortSharingBinding" portSharingEnabled="true">
          <security mode="None" />
        </binding>
      </netTcpBinding>
    </bindings>

    <!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
    <behaviors>
      <serviceBehaviors>
        <behavior name="CalculatorServiceBehavior">
          <serviceMetadata />
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>

  </system.serviceModel>

El extremo del cliente se configura como se muestra en el código muestra siguiente:

    <system.serviceModel>
        <bindings>
            <netTcpBinding>
              <binding name="NetTcpBinding_ICalculator">
                <security mode="None"/>
              </binding>
            </netTcpBinding>
        </bindings>
        <client>
            <endpoint address="net.tcp://localhost/servicemodelsamples/service.svc"
                binding="netTcpBinding" bindingConfiguration="NetTcpBinding_ICalculator"
                contract="Microsoft.ServiceModel.Samples.ICalculator" name="NetTcpBinding_ICalculator" />
        </client>
    </system.serviceModel>

Al ejecutar el ejemplo, las solicitudes y respuestas de la operación se muestran en la ventana de la consola del cliente. Presione ENTRAR en la ventana de cliente para cerrar el cliente.

    Add(100,15.99) = 115.99
    Subtract(145,76.54) = 68.46
    Multiply(9,81.25) = 731.25
    Divide(22,7) = 3.14285714285714

    Press <ENTER> to terminate client.

Para configurar, compilar y ejecutar el ejemplo

  1. Asegúrese de que está instalado IIS 7.0. IIS 7.0 se requiere para la activación WAS.

  2. Asegúrese de realizar los Procedimiento de instalación única para los ejemplos de Windows Communication Foundation.

    Además, debe instalar los componentes de activación que no son HTTP de WCF:

    1. En el menú Inicio, elija Panel de control.

    2. Seleccione Programas y características.

    3. Haga clic en Activar o desactivar los componentes Windows.

    4. Expanda el nodo Microsoft .NET Framework 3.0 y compruebe la característica Activación No HTTP de Windows Communication Foundation .

  3. Configure WAS para admitir la activación del TCP.

    Para su comodidad, los dos pasos siguientes se implementan en un archivo de información llamado AddNetTcpSiteBinding.cmd localizado en el directorio de ejemplo.

    1. Para admitir la activación del net.tcp, el sitio web predeterminado debe enlazarse primero a un puerto net.tcp. Esto se puede hacer utilizando Appcmd.exe, que se instala con el conjunto de herramientas de administración Internet Information Server 7.0 (IIS). Desde un símbolo del sistema del nivel administrador, ejecute el comando siguiente:

      %windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.tcp',bindingInformation='808:*']
      
      ms752218.Tip(es-es,VS.100).gifSugerencia:
      Este comando es una sola línea de texto. Este comando agrega un enlace del sitio net.tcp al sitio web predeterminado que realiza escuchas en el puerto TCP 808 con cualquier nombre de host.

    2. Aunque todas las aplicaciones dentro de un sitio comparten un enlace net. tcp común, cada aplicación puede habilitar la compatibilidad net. tcp individualmente. Para habilitar el net.tcp para la aplicación /servicemodelsamples, ejecute el comando siguiente desde un símbolo del sistema del nivel del administrador:

      %windir%\system32\inetsrv\appcmd.exe set app 
      "Default Web Site/servicemodelsamples" /enabledProtocols:http,net.tcp
      
      ms752218.note(es-es,VS.100).gifNota:
      Este comando es una línea de texto única. Este comando habilita la aplicación /servicemodelsamples para tener acceso utilizando https://localhost/servicemodelsamples y net.tcp://localhost/servicemodelsamples.

  4. Para compilar el código de la edición .NET de C# o Visual Basic de la solución, siga las instrucciones de Compilación de los ejemplos de Windows Communication Foundation.

  5. Para ejecutar el ejemplo en una configuración de equipos única o cruzada, siga las instrucciones de Running the Windows Communication Foundation Samples.

    Quite el enlace del sitio de net.tcp que ha agregado para este ejemplo.

    Para su comodidad, los dos pasos siguientes se implementan en un archivo de información llamado RemoveNetTcpSiteBinding.cmd localizado en el directorio de ejemplo.

    1. Quite el net.tcp de la lista de protocolos habilitados ejecutando el comando siguiente desde un símbolo del sistema del nivel del administrador:

      %windir%\system32\inetsrv\appcmd.exe set app 
      "Default Web Site/servicemodelsamples" /enabledProtocols:http
      
      ms752218.note(es-es,VS.100).gifNota:
      Este comando se debe escribir como una línea de texto única.

    2. Quite el enlace del sitio net.tcp ejecutando el siguiente comando desde un símbolo del sistema de nivel de administrador:

      %windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" 
      --bindings.[protocol='net.tcp',bindingInformation='808:*']
      
      ms752218.note(es-es,VS.100).gifNota:
      Este comando se debe escribir en una sola línea de texto.

Vea también

Otros recursos

Ejemplos de hospedaje y persistencia de AppFabric