Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En el ejemplo NamedPipeActivation se muestra cómo hospedar un servicio que usa el Servicio de activación de procesos de Windows (WAS) para activar un servicio que se comunica a través de canalizaciones con nombre. Este ejemplo se basa en la introducción y requiere que Windows Vista se ejecute.
Nota:
El procedimiento de configuración y las instrucciones de compilación de este ejemplo se encuentran al final de este tema.
Detalles de ejemplo
El ejemplo consta de un programa de consola de cliente (.exe) y una biblioteca de servicios (.dll) hospedada en un proceso de trabajo activado por los Servicios de activación de procesos de Windows (WAS). La actividad del cliente está visible en la ventana de la consola.
El servicio implementa un contrato que define un patrón de comunicación de solicitud-respuesta. El contrato se define mediante la ICalculator
interfaz , que expone las operaciones matemáticas (Agregar, Restar, Multiplicar y Dividir), como se muestra en el código de ejemplo 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);
}
El cliente realiza solicitudes sincrónicas a una operación matemática determinada y 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;
}
}
En el ejemplo se usa un enlace modificado netNamedPipeBinding
sin seguridad. El enlace se especifica en los archivos de configuración para el cliente y el servicio. El tipo de enlace para el servicio se especifica en el atributo del binding
elemento de punto de conexión, como se muestra en la siguiente configuración de ejemplo.
Si desea usar un enlace de canalización con nombre protegido, cambie el modo de seguridad del servidor a la configuración de seguridad deseada y vuelva a ejecutar svcutil.exe en el cliente para obtener un archivo de configuración de cliente actualizado.
<system.serviceModel>
<services>
<service name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
<!-- This endpoint is exposed at the base address provided by host: net.pipe://localhost/servicemodelsamples/service.svc -->
<endpoint address=""
binding="netNamedPipeBinding"
bindingConfiguration="Binding1"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
<!-- the mex endpoint is exposed at net.pipe://localhost/servicemodelsamples/service.svc/mex -->
<endpoint address="mex"
binding="mexNamedPipeBinding"
contract="IMetadataExchange" />
</service>
</services>
<bindings>
<netNamedPipeBinding>
<binding name="Binding1" >
<security mode = "None">
</security>
</binding >
</netNamedPipeBinding>
</bindings>
<!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorServiceBehavior">
<serviceMetadata />
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
La información del punto de conexión del cliente se configura como se muestra en el código de ejemplo siguiente.
<system.serviceModel>
<client>
<endpoint name=""
address="net.pipe://localhost/servicemodelsamples/service.svc"
binding="netNamedPipeBinding"
bindingConfiguration="Binding1"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
</client>
<bindings>
<!-- Following is the expanded configuration section for a NetNamedPipeBinding.
Each property is configured with the default value. -->
<netNamedPipeBinding>
<binding name="Binding1"
maxBufferSize="65536"
maxConnections="10">
<security mode = "None">
</security>
</binding >
</netNamedPipeBinding>
</bindings>
</system.serviceModel>
Al ejecutar el ejemplo, las solicitudes de operación y las respuestas se muestran en la ventana de la consola del cliente. Presione ENTRAR en la ventana del cliente para apagar 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
Asegúrese de que IIS 7.0 esté instalado. IIS 7.0 es necesario para la activación de WAS.
Asegúrese de haber realizado el Procedimiento de instalación única para los ejemplos de Windows Communication Foundation.
Además, debe instalar los componentes de activación no HTTP de WCF:
En el menú Inicio , elija Panel de control.
Seleccione Programas y características.
Haga clic en Activar o desactivar componentes de Windows.
Expanda el nodo Microsoft .NET Framework 3.0 y compruebe la característica Activación sin HTTP de Windows Communication Foundation .
Configure el Servicio de activación de procesos de Windows (WAS) para admitir la activación de canalización con nombre.
Como comodidad, los dos pasos siguientes se implementan en un archivo por lotes denominado AddNetPipeSiteBinding.cmd ubicado en el directorio de ejemplo.
Para admitir la activación de net.pipe, el sitio web predeterminado debe estar enlazado primero al protocolo net.pipe. Esto se puede hacer mediante appcmd.exe, que se instala con el conjunto de herramientas de administración de IIS 7.0. Desde un terminal con privilegios elevados (administrador), ejecute el siguiente comando.
%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.pipe',bindingInformation='*']
Nota:
Este comando es una sola línea de texto.
Este comando agrega un enlace de sitio net.pipe al sitio web predeterminado.
Aunque todas las aplicaciones de un sitio comparten un enlace de net.pipe común, cada aplicación puede habilitar la compatibilidad con net.pipe individualmente. Para habilitar net.pipe para la aplicación /servicemodelsamples, ejecute el siguiente comando desde un símbolo del sistema con privilegios elevados.
%windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/servicemodelsamples" /enabledProtocols:http,net.pipe
Nota:
Este comando es una sola línea de texto.
Este comando permite tener acceso a la aplicación /servicemodelsamples mediante
http://localhost/servicemodelsamples
ynet.tcp://localhost/servicemodelsamples
.
Para compilar el código C# o Visual Basic .NET Edition de la solución, siga las instrucciones de Building the Windows Communication Foundation Samples.
Quite el enlace de sitio net.pipe que agregó para este ejemplo.
Como comodidad, los dos pasos siguientes se implementan en un archivo por lotes denominado RemoveNetPipeSiteBinding.cmd ubicado en el directorio de ejemplo:
Quite net.tcp de la lista de protocolos habilitados mediante la ejecución del siguiente comando desde un símbolo del sistema con privilegios elevados.
%windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/servicemodelsamples" /enabledProtocols:http
Nota:
Este comando debe escribirse como una sola línea de texto.
Quite el enlace de sitio net.tcp ejecutando el comando siguiente desde un símbolo del sistema con privilegios elevados.
%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" --bindings.[protocol='net.pipe',bindingInformation='*']
Nota:
Este comando debe escribirse como una sola línea de texto.