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.
Este tema es aplicable a Windows Workflow Foundation 4.
En este ejemplo se muestra cómo instalar y configurar el intercambio de mensajes dúplex duradero utilizando las actividades de mensajería de Windows Workflow Foundation (WF). Un intercambio de mensajes dúplex duradero es un intercambio de mensajes bidireccional que tiene lugar a lo largo de un período largo de tiempo. La duración del intercambio de mensajes puede ser mayor que la duración del canal de comunicación y la duración en memoria de las instancias de servicio.
Detalles del ejemplo
En este ejemplo, se configuran dos servicios Windows Communication Foundation (WCF) implementados utilizando Windows Workflow Foundation para tener un intercambio de mensajes dúplex duradero. El intercambio de mensajes dúplex duradero está compuesto por dos mensajes unidireccionales que se envían a través de MSMQ y se correlacionan con el intercambio de contexto de .NET. Los mensajes se envían mediante las actividades de mensajería Send y Receive. El intercambio de contexto de .NET se utiliza para especificar la dirección de devolución de llamada en los mensajes enviados. Ambos servicios se hospedan mediante Windows Process Activation Services (WAS) y se configuran para habilitar la persistencia de las instancias de los servicios.
El primer servicio (Service1.xamlx) envía una solicitud al servicio de envío (Service2.xamlx) para que realice algún trabajo. Una vez completado el trabajo, Service2.xamlx devuelve una notificación a Service1.xamlx para indicar que se ha completado el trabajo. Una aplicación de consola de flujo de trabajo prepara las colas donde están realizando escuchas los servicios y envía al mensaje Start inicial para activar Service1.xamlx. Cuando Service1.xamlx recibe la notificación de Service2.xamlx que indica que se ha completado el trabajo solicitado, Service1.xamlx guarda el resultado en un archivo XML. Mientras espera el mensaje de devolución de llamada, Service1.xamlx conserva su estado de la instancia mediante la clase WorkflowIdleBehavior predeterminada. Service2.xamlx conserva su estado de instancia como parte de la finalización del trabajo solicitado por Service1.xamlx.
Para configurar los servicios y que usen el intercambio de contexto de .NET en MSMQ, ambos servicios se configuran para utilizar un enlace personalizado que consta de ContextBindingElement y MsmqTransportBindingElement. Una dirección de devolución de llamada se especifica con ContextBindingElement y se incluye en un encabezado de contexto de devolución de llamada con todos los mensajes enviados mediante un enlace personalizado. El siguiente ejemplo de código define el enlace personalizado.
<configuration>
<system.serviceModel>
…
<bindings>
<customBinding>
<binding name="netMsmqContextBinding">
<context clientCallbackAddress="net.msmq://localhost/private/DurableDuplex/Service1.xamlx"/>
<msmqTransport exactlyOnce="False">
<msmqTransportSecurity msmqAuthenticationMode="None" msmqProtectionLevel="None"/>
</msmqTransport>
</binding>
</customBinding>
</bindings>
…
</system.serviceModel>
</configuration>
![]() |
---|
El enlace utilizado por este ejemplo no es seguro. Al implementar su aplicación, debería configurar el enlace en función de los requisitos de seguridad de la aplicación. |
![]() |
---|
Las colas utilizadas en este ejemplo no son transaccionales. Para obtener un ejemplo que muestra cómo preparar intercambios de mensajes de WCF mediante colas de la transacción, vea el ejemplo de MSMQ Activation. |
El mensaje enviado por Service1.xamlx a Service2.xamlx se envía mediante un extremo de cliente configurado con la dirección de Service2.xamlx y el enlace personalizado definido previamente. La devolución de llamada de Service2.xamlx a Service1.xamlx se envía mediante un extremo de cliente sin ninguna dirección configurada explícitamente, ya que la dirección se toma del contexto de devolución de llamada enviado por Service1.xamlx. El siguiente ejemplo de código define los extremos de cliente.
<?xml version="1.0"?>
<configuration>
<system.serviceModel>
…
<client>
<endpoint address="net.msmq://localhost/private/DurableDuplex/Service2.xamlx" binding="customBinding" bindingConfiguration="netMsmqContextBinding" contract="IDoWork"/>
<endpoint binding="customBinding" bindingConfiguration="netMsmqContextBinding" contract="INotify"/>
</client>
…
</system.serviceModel>
</configuration>
El siguiente ejemplo de código expone los extremos que usan este enlace personalizado cambiando la asignación de protocolo predeterminado para que las direcciones base de net.msmq utilicen este enlace personalizado.
<configuration>
<system.serviceModel>
<protocolMapping>
<add scheme="net.msmq" binding="customBinding" bindingConfiguration="netMsmqContextBinding"/>
</protocolMapping>
…
</system.serviceModel>
</configuration>
El siguiente ejemplo de código habilita la persistencia para ambos servicios agregando el comportamiento SqlWorkflowInstanceStoreBehavior a ambos servicios y especificando la cadena de conexión para la base de datos de persistencia.
<?xml version="1.0"?>
<configuration>
<system.serviceModel>
…
<behaviors>
<serviceBehaviors>
<behavior>
<serviceDebug includeExceptionDetailInFaults="True"/>
<serviceMetadata httpGetEnabled="True"/>
<sqlWorkflowInstanceStore connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=DefaultSampleStore;Integrated Security=True"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Requisitos del sistema
Este ejemplo requiere los componentes siguientes.
Internet Information Services.
Internet Information Services -> Compatibilidad con la administración de IIS 6.0 -> Compatibilidad con la configuración de metabase de IIS e IIS 6.0.
Servicios World Wide Web -> Características de desarrollo de aplicaciones -> ASP.NET.
Microsoft Message Queues (MSMQ) Server.
Para utilizar este ejemplo
Configure la base de datos de persistencia y el directorio de resultados.
Abra un símbolo del sistema de Visual Studio 2010.
Navegue hasta la carpeta de este ejemplo y ejecute Setup.cmd.
Configure la aplicación virtual.
Desde un símbolo del sistema de Visual Studio 2010, registre ASP.NET ejecutando el siguiente comando.
aspnet_regiis -i
Ejecute Visual Studio 2010 con permisos de administrador haciendo clic con el botón secundario en Visual Studio 2010 y seleccionando Ejecutar como administrador.
Mediante Visual Studio 2010, abra el archivo DurableDuplex.sln.
Configure las colas de servicio.
Para ejecutar el cliente de DurableDuplex, presione F5.
En un símbolo del sistema, ejecute Compmgmt.msc para abrir la consola Administración de equipos.
Expanda Servicio y Aplicaciones, Message Queue Server, Colas privadas.
Haga clic con el botón secundario en las colas durableduplex/service1.xamlx y durableduplex/service2.xamlx y seleccione Propiedades.
Seleccione la pestaña Seguridad y otorgue al grupo Todos los permisos Recibir mensaje, Inspeccionar mensaje y Enviar mensaje para ambas colas.
Abra el Administrador de Internet Information Services (IIS).
Navegue hasta Servidor, Sitios, Sitio web predeterminado, Privado, Dúplex duradero y seleccione Opciones avanzadas.
Cambie Protocolos habilitados a http,net.msmq.
Ejecute el ejemplo.
Vaya a https://localhost/private/durableduplex/service1.xamlx y https://localhost/private/durableduplex/service2.xamlx para asegurarse de que ambos servicios se están ejecutando.
Presione F5 para ejecutar DurableDuplexClient.
Cuando el intercambio de mensajes dúplex duradero se completa, se guarda un archivo result.xml en la carpeta C:\Inbox que contiene el resultado del intercambio de mensajes.
Para realizar la limpieza (Opcional)
Ejecute Cleanup.cmd.
Abra un símbolo del sistema de Visual Studio 2010.
Navegue hasta la carpeta de este ejemplo y ejecute Cleanup.cmd.
Quite la aplicación virtual para los servicios.
Abra el Administrador de Internet Information Services (IIS) ejecutando Inetmgr.exe desde un símbolo del sistema.
Vaya al sitio web predeterminado y quite el directorio virtual private.
Quite las colas preparadas para este ejemplo.
En un símbolo del sistema, ejecute Compmgmt.msc para abrir la consola Administración de equipos.
Expanda Servicios y Aplicaciones, Message Queue Server, Colas privadas.
Elimine las colas durableduplex/service1.xamlx y durableduplex/service2.xamlx.
Quite el directorio C:\Inbox.
![]() |
---|
Puede que los ejemplos ya estén instalados en su equipo. Compruebe el siguiente directorio (valor predeterminado) antes de continuar.
<unidadDeInstalación>:\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.
<unidadDeInstalación>:\WF_WCF_Samples\WF\Basic\Services\DurableDuplex
|