SendMSMQMessage
En el ejemplo SendMSMQMessage se muestra cómo enviar un mensaje a un puerto de MSMQ desde una aplicación basada en .NET. También proporciona instrucciones sobre cómo configurar Microsoft BizTalk Server para usar una ubicación de recepción de MSMQ.
Debe tener en cuenta que muchas operaciones en MSMQ son asíncronas. Es decir, muchas llamadas API de MSMQ (por ejemplo, System.Messaging.MessageQueue.Send) vuelven al autor de la llamada antes de que la operación solicitada se haya completado por completo. MSMQ proporciona un mecanismo de envío de comentarios a la aplicación una vez completada la operación. Este mecanismo implica el uso de una "cola de Administración". MSMQ devuelve comentarios en forma de mensaje en la cola de Administración. La cola de administración a la que MSMQ devolverá los comentarios se especifica cuando se efectúe la llamada original de la API MSMQ. Por lo tanto, por ejemplo, al enviar un mensaje mediante la API System.Messaging.MessageQueue.Send, la aplicación puede especificar el nombre de una cola de Administración mediante la propiedad de mensaje PROPID_M_ADMIN_QUEUE en el mensaje pasado en la llamada a System.Messaging.MessageQueue.Send. Aunque la aplicación pueda obtener un código de retorno correcto en la llamada System.Messaging.MessageQueue.Send, si se produce un error en la operación de envío de mensajes posteriormente, MSMQ escribe un mensaje en ese efecto en la cola de Administración especificada. Si la aplicación no especifica una cola de Administración, el error de envío produce la pérdida del mensaje y no se captura ningún diagnóstico, en efecto, el mensaje desaparece sin ninguna evidencia. Hay varias situaciones de error en MSMQ que pueden hacer que esto ocurra; por ejemplo, la realización de un envío no transaccional a una cola transaccional.
En el contexto de este ejemplo, es importante que el código especifique un tipo de transacción en la llamada a System.Messaging.MessageQueue.Send que sea coherente con la compatibilidad de transacciones especificada para la cola a la que se envía el mensaje. Si esto último no se lleva a cabo y no se especifica ninguna cola de administración (como en el caso de este ejemplo), MSMQ descarta el mensaje enviado sin dar ninguna indicación de ello (es decir, sin que se devuelva código de error alguno a la aplicación, sin que se escriba ningún diagnóstico en el registro de eventos, etc.).
<Ruta de acceso> de ejemplos\AdaptersUsage\SendMSMQMessage\
En la tabla siguiente se enumeran los archivos del ejemplo y se describe su propósito.
Archivos | Descripción |
---|---|
App.ico, AssemblyInfo.cs, SendMSMQMessage.csproj, SendMSMQMessage.sln | Proporciona archivos de proyecto y de solución, así como los archivos relacionados para la aplicación gráfica simple para este ejemplo. |
Form1.cs, Form1.resx | Proporcione archivos de formulario y origen de Microsoft Visual C#.NET para la aplicación gráfica sencilla para este ejemplo. |
Puede usar el código de la aplicación gráfica sencilla incluida con este ejemplo como ejemplo de cómo enviar mensajes a ubicaciones de recepción de MSMQ dentro de BizTalk Server desde . Aplicaciones habilitadas para NET como Microsoft Office, desde ASP.NET páginas, etc.
Con Visual Studio, abra el archivo de solución SendMSMQMessage.sln.
En el menú Compilar , haga clic en Compilar solución.
Use los procedimientos siguientes para configurar BizTalk Server y crear la cola de MSMQ para ejecutar el ejemplo.
Haga clic en Inicio, haga clic con el botón secundario en Equipo y, a continuación, haga clic en Administrar.
Expanda el nodo Características . Si Message Queuing no está instalado, haga clic con el botón derecho en Características y seleccione Agregar características. Active Message Queuing, haga clic en Siguientey, a continuación, haga clic en Instalar para instalar MSMQ en ese sistema.
Expanda el nodo Message Queuing .
Haga clic con el botón derecho en el nodo Colas privadas , haga clic en Nuevoy, a continuación, en Cola privada.
En Nombre de cola, escriba
test
. Asegúrese de que la casilla Transaccional está activada.Haga clic en OK.
Haga clic en Inicio, haga clic con el botón secundario en Equipo y, a continuación, haga clic en Administrar.
Expanda Servicios y aplicaciones y, a continuación, expanda el nodo Message Queuing .
Nota
Si Message Queuing no está instalado en el equipo, vaya a Panel de control > Programas > y características y, a continuación, seleccione Activar o desactivar características de Windows. Compruebe todas las características de Microsoft Message Queue (MSMQ) Server y, a continuación, haga clic en Aceptar.
Haga clic con el botón derecho en el nodo Colas privadas , haga clic en Nuevoy, a continuación, en Cola privada.
En Nombre de la cola, escriba test. Asegúrese de que la casilla Transaccional está activada.
Haga clic en OK.
Seleccione una carpeta en la que recibir mensajes. En los siguientes pasos se da por supuesto que ha seleccionado C:\Demo\Report, pero puede ajustar los pasos según sea necesario para otra carpeta.
Abra la consola de administración de BizTalk Server.
Cree una nueva aplicación denominada MSMQSample.
Haga clic con el botón derecho en Puertos de recepción, haga clic en Nuevoy, a continuación, en Puerto de recepción unidireccional.
En el cuadro de diálogo Propiedades del puerto de recepción, en el cuadro Nombre , escriba MyReceivePort y, a continuación, haga clic en Aceptar.
Haga clic con el botón derecho en Ubicaciones de recepción, haga clic en Nuevoy, a continuación, en Ubicación de recepción unidireccional. En el cuadro de diálogo Seleccionar un puerto de recepción, seleccione el puerto de recepción que acaba de crear y haga clic en Aceptar.
En el cuadro de diálogo Propiedades de ubicación de recepción, en el cuadro Nombre , escriba un nombre para el puerto de recepción, como MSMQReceiveLocation.
En el cuadro de diálogo Propiedades de ubicación de recepción, para el tipo de transporte, seleccione MSMQ .
Haga clic en Configurar para abrir el cuadro de diálogo Propiedades de transporte de MSMQ . Establezca Queue en
localhost\private$\test
, establezca Transactional en y, aTrue
continuación, haga clic en Aceptar.Expanda la aplicación, seleccione Puertos de envío, Seleccione Nuevo, Seleccione Puerto de envío unidireccional estático.
En el cuadro de diálogo Propiedades del puerto de envío, en el cuadro Nombre , escriba un nombre para el puerto de envío, como MySendPort.
Establezca la propiedad Tipo de transporte en FILE.
Haga clic en Configurar para abrir el cuadro de diálogo Propiedades de transporte de archivos.
En el cuadro de diálogo Propiedades de transporte de archivos , establezca la propiedad Carpeta de destino en C:\Demo\Report, mantenga la configuración predeterminada para las demás propiedades y, a continuación, haga clic en Aceptar.
Seleccione Filtros y, a continuación, agregue una nueva fila estableciendo Property en BTS. ReceivePortName. Deje la columna Operador establecida ==en , establezca la columna Valor en MyReceivePort y, a continuación, haga clic en Aceptar.
Haga clic con el botón derecho en el nuevo puerto de envío y, a continuación, haga clic en Inscribir.
Vuelva a hacer clic con el botón derecho en el nuevo puerto de envío y, a continuación, haga clic en Iniciar.
Haga clic con el botón derecho en la nueva ubicación de recepción y, a continuación, haga clic en Habilitar.
BizTalk Server ya está listo para trabajar con este ejemplo.
Utilice el siguiente procedimiento para ejecutar el ejemplo SendMSMQMessage.
En una ventana de comandos, desplácese a la siguiente carpeta:
<Ruta de acceso> de ejemplos\AdaptersUsage\SendMSMQMessage\bin\Debug
Ejecute el archivo SendMSMQMessage.exe, que inicia la aplicación gráfica que proporciona la interfaz de usuario de este ejemplo.
En la aplicación gráfica, en el cuadro Nombre del equipo de BizTalk , escriba el nombre del equipo local.
Pruebe la opción Enviar encapsulado :
Opcionalmente, cambie el texto en el cuadro Cuerpo del mensaje.
Haga clic en Enviar encapsulado.
Si la operación se realiza correctamente, verá lo siguiente:
La palabra Success aparece en fuente roja en el cuadro inmediatamente encima de los botones.
Aparecerá un archivo en la carpeta de destino, C:\Demo\Reports. Este archivo contiene el texto del cuadro Cuerpo del mensaje ajustado en etiquetas XML simples por la biblioteca de cola de mensajes de .NET.
Si se produce un error en la operación, verá un mensaje de error en el cuadro justo encima de los botones.
Pruebe la opción Enviar exactamente :
Opcionalmente, cambie el texto en el cuadro Cuerpo del mensaje.
Haga clic en Enviar exactamente.
Si la operación se realiza correctamente, verá lo siguiente:
La palabra Success aparece en fuente roja en el cuadro inmediatamente encima de los botones.
Aparecerá un archivo en la carpeta de destino, C:\Demo\Reports. Este archivo contiene el texto del cuadro Cuerpo del mensaje exactamente como aparece en el cuadro de texto.
Si se produce un error en la operación, verá un mensaje de error en el cuadro justo encima de los botones.