Como gravar e ler de Microsoft Message Queuing no translation from VPE for Csharp Visual

Support for Windows XP has ended

Microsoft ended support for Windows XP on April 8, 2014. This change has affected your software updates and security options. Learn what this means for you and how to stay protected.

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 815811
Sumário
Este artigo descreve o seguinte:
  • Como criar uma mensagem e enviá-lo para enfileiramento de mensagens da Microsoft em um aplicativo do Windows.
  • Como ler de uma fila particular e desserializar o conteúdo da mensagem para exibição.
back to the top

Requisitos

Os seguintes itens descrevem recomendado de hardware, software, infra-estrutura de rede, habilidades e conhecimento e service packs são necessários:
  • Um dos seguintes sistemas operacionais com o Microsoft Message Queuing instalado (ele é incluído como uma opção nos quatro sistemas operacionais): Windows 2000 (ou Server), ou Windows XP Professional (ou servidor).
Este artigo também pressupõe que você esteja familiarizado com o seguinte:
  • Microsoft Message Queuing
  • Usando ferramentas a partir do prompt de comando
back to the top

Gravar e ler a partir Microsoft Message Queuing


O namespace System.Messaging no Microsoft .NET Framework tem as classes que você deve ter para ler e gravar para enfileiramento de mensagens da Microsoft. Para criar um pequeno aplicativo do Windows que imita um sistema de pagamento de contas online, execute estas etapas:
  1. Abra o Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005.
  2. Crie um novo aplicativo do Windows em translation from VPE for Csharp Visual e, em seguida, nomeie-o MSMQ .
  3. Para exibir o Solution Explorer se ele não aparecer, pressione CTRL + ALT + L. No Solution Explorer, clique com o botão direito do mouse em References e, em seguida, clique em Add Reference .
  4. Na guia .NET , selecione System.Messaging.dll arquivo na lista de arquivos .dll. Clique em Selecionar e, em seguida, clique em OK .

    Observação No Visual Studio 2005, clique em System.Messaging.dll arquivo na lista de DLLs e, em seguida, clique em OK .
  5. Form1.cs está aberto em modo de Design . Se não estiver aberto, clique duas vezes em Form1.cs no Solution Explorer.
  6. Pressione CTRL + ALT + X para abrir a caixa de ferramentas. Na caixa de ferramentas , clique na guia Windows Forms .
  7. Em Toolbox , arraste o seguinte para o meio de Form1 :
    • 4 linhas cada um de um rótulo e um TextBox (posicionada à direita de cada etiqueta).
    • Em rótulos e caixas de texto, arraste dois controles de botão para Form1 .
  8. Clique os controles com o botão direito do mouse, clique em Propriedades e defina a propriedade Text para os rótulos para o seguinte (em ordem):
    • De pagamento para:
    • Seu nome:
    • Quantidade:
    • Data de conclusão:
  9. Na caixa de diálogo Propriedades , definir a propriedade Text de button1 para Enviar o pagamento e definir a propriedade Text de button2 para Pagamento do processo .
  10. Este aplicativo funciona com uma fila particular que você deve primeiro criar no console de gerenciamento do computador. Para fazer isso, execute as seguintes etapas:
    1. Na área de trabalho, clique com o botão direito do mouse Meu computador e clique em Gerenciar .
    2. Expanda o nó Serviços e aplicativos para localizar o Message Queuing.

      Observação Se você não encontrar o Message Queuing, não está instalado.
  11. Expanda o Message Queuing , clique com o botão direito do mouse Filas particulares , aponte para novo e, em seguida, clique em Fila particular .
  12. Na caixa nome da fila , digite billpay e, em seguida, clique em OK .

    Observação Não selecione a caixa de seleção transacional . Deixe o Computer Management console aberto porque você retornar a ele posteriormente para exibir mensagens.
  13. Na parte superior do código no Form1, adicione dois usar instruções antes da declaração de classe para incluir as classes adicionais que residem no namespace System.Messaging e os namespaces System.Text . (O namespace System.Text é para o uso da classe StringBuilder , uma nova classe .NET Framework que é melhor usar quando você concatenar cadeias de caracteres.)
    using System.Messaging;using System.Text;
  14. Crie uma estrutura que contém variáveis para armazenar os dados que define um pagamento. Para criar a estrutura, adicione o código a seguir após o procedimento Main :
    public struct Payment{    public string Payor,Payee;    public int Amount;    public string DueDate;	}
  15. Adicione o código nas etapas a seguir para o evento Click do button1 .
    1. Defina as propriedades da estrutura para valores de elementos de formulário da seguinte maneira:
      Payment myPayment;  myPayment.Payor = textBox1.Text;myPayment.Payee = textBox2.Text;myPayment.Amount = Convert.ToInt32(textBox3.Text);myPayment.DueDate = textBox4.Text;
    2. Criar uma instância da classe Message e, em seguida, defina a propriedade corpo para a estrutura de pagamento:
      System.Messaging.Message msg = new System.Messaging.Message();msg.Body=myPayment;
    3. Para enviar uma mensagem para o Microsoft Message Queuing, criar uma instância da classe MessageQueue e chamar o método Enviar passa o objeto Message . A classe MessageQueue é o wrapper que gerencia a interação com o Microsoft Message Queuing.

      Observe a sintaxe para definir o caminho da fila particular que você criou no console de gerenciamento do computador. Filas particulares levar o formulário machinename\Private $ \queuename . Máquinas de host local são referenciadas com um ponto ou um período (mostrado como ". ").
      MessageQueue msgQ =new MessageQueue(".\\Private$\\billpay");msgQ.Send(msg);

      Agora existe o código para enviar uma mensagem para enfileiramento de mensagens da Microsoft. O .NET Framework serializa automaticamente a mensagem usando um objeto XMLMessageFormatter . Este objeto é criado implicitamente quando as mensagens são enviadas.
  16. Adicione o código nas etapas a seguir para o evento Click de button2 . O manipulador de eventos button2_Click recebe e processa a mensagem de pagamento que é enviada no manipulador de eventos button1 .
    1. A primeira linha de código é o mesmo que a linha de código está no manipulador de eventos primeiro:
      MessageQueue msgQ = new MessageQueue(".\\Private$\\billpay");
    2. Crie uma matriz de tipos para passar para a classe XMLMessageFormatter .
      Observação Essa classe deve ser criada explicitamente ao receber mensagens. O construtor da classe XMLMessageFormatter utiliza tanto uma matriz de seqüência de caracteres de nomes de tipo ou, mais preferência, uma tipo matriz de tipos:
      Payment  myPayment=new Payment();Object o=new Object();System.Type[]  arrTypes=new System.Type [2];arrTypes[0] = myPayment.GetType();arrTypes[1] = o.GetType();msgQ.Formatter = new XmlMessageFormatter(arrTypes);myPayment=((Payment)msgQ.Receive().Body);
      esses tipos de informar ao XMLMessageFormatter como desserializar a mensagem.
    3. As mensagens são recebidas chamando o método de recebimento . Acessa a propriedade corpo para ler o conteúdo da mensagem. A propriedade Body retorna um objeto, portanto o objeto tem que ser convertido no tipo de pagamento para recuperar o conteúdo em um formulário pode ser usado:
      StringBuilder sb = new StringBuilder();sb.Append("Payment paid to: " + myPayment.Payor);sb.Append("\n");sb.Append("Paid by: " + myPayment.Payee);sb.Append("\n");sb.Append("Amount: $" + myPayment.Amount.ToString());sb.Append("\n");sb.Append("Due Date: " + Convert.ToDateTime(myPayment.DueDate));
    4. Criar uma caixa de mensagem para exibir os resultados:
      MessageBox.Show(sb.ToString(), "Message Received!");
back to the top

Concluir código listagem (Form1.cs)

using System.Messaging;using System.Text;using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;namespace WindowsApplication1{/// <summary>/// Summary description for Form1./// </summary>public class Form1 : System.Windows.Forms.Form{private System.Windows.Forms.Label label1;private System.Windows.Forms.Label label2;private System.Windows.Forms.Label label3;private System.Windows.Forms.Label label4;private System.Windows.Forms.TextBox textBox1;private System.Windows.Forms.TextBox textBox2;private System.Windows.Forms.TextBox textBox3;private System.Windows.Forms.TextBox textBox4;private System.Windows.Forms.Button button1;private System.Windows.Forms.Button button2;/// <summary>/// Required designer variable./// </summary>private System.ComponentModel.Container components = null;public Form1(){	//	// Required for Windows Form Designer support	//	InitializeComponent();	//	// TODO: Add any constructor code after InitializeComponent call	//}/// <summary>/// Clean up any resources being used./// </summary>protected override void Dispose( bool disposing ){	if( disposing )	{		if (components != null) 		{			components.Dispose();		}	}	base.Dispose( disposing );}#region Windows Form Designer generated code/// <summary>/// Required method for Designer support - do not modify/// the contents of this method with the code editor./// </summary>private void InitializeComponent(){	this.label1 = new System.Windows.Forms.Label();	this.label2 = new System.Windows.Forms.Label();	this.label3 = new System.Windows.Forms.Label();	this.label4 = new System.Windows.Forms.Label();	this.textBox1 = new System.Windows.Forms.TextBox();	this.textBox2 = new System.Windows.Forms.TextBox();	this.textBox3 = new System.Windows.Forms.TextBox();	this.textBox4 = new System.Windows.Forms.TextBox();	this.button1 = new System.Windows.Forms.Button();	this.button2 = new System.Windows.Forms.Button();	this.SuspendLayout();	// 	// label1	// 	this.label1.Location = new System.Drawing.Point(8, 24);	this.label1.Name = "label1";	this.label1.Size = new System.Drawing.Size(104, 32);	this.label1.TabIndex = 0;	this.label1.Text = "Pay To:";	// 	// label2	// 	this.label2.Location = new System.Drawing.Point(8, 80);	this.label2.Name = "label2";	this.label2.Size = new System.Drawing.Size(104, 32);	this.label2.TabIndex = 1;	this.label2.Text = "Your Name:";	// 	// label3	// 	this.label3.Location = new System.Drawing.Point(8, 136);	this.label3.Name = "label3";	this.label3.Size = new System.Drawing.Size(112, 32);	this.label3.TabIndex = 2;	this.label3.Text = "Amount:";	// 	// label4	// 	this.label4.Location = new System.Drawing.Point(8, 184);	this.label4.Name = "label4";	this.label4.Size = new System.Drawing.Size(104, 40);	this.label4.TabIndex = 3;	this.label4.Text = "Due To:";	// 	// textBox1	// 	this.textBox1.Location = new System.Drawing.Point(152, 24);	this.textBox1.Name = "textBox1";	this.textBox1.Size = new System.Drawing.Size(128, 20);	this.textBox1.TabIndex = 4;	this.textBox1.Text = "textBox1";	// 	// textBox2	// 	this.textBox2.Location = new System.Drawing.Point(160, 80);	this.textBox2.Name = "textBox2";	this.textBox2.TabIndex = 5;	this.textBox2.Text = "textBox2";	// 	// textBox3	// 	this.textBox3.Location = new System.Drawing.Point(160, 128);	this.textBox3.Name = "textBox3";	this.textBox3.Size = new System.Drawing.Size(112, 20);	this.textBox3.TabIndex = 6;	this.textBox3.Text = "textBox3";	// 	// textBox4	// 	this.textBox4.Location = new System.Drawing.Point(160, 184);	this.textBox4.Name = "textBox4";	this.textBox4.Size = new System.Drawing.Size(120, 20);	this.textBox4.TabIndex = 7;	this.textBox4.Text = "textBox4";	// 	// button1	// 	this.button1.Location = new System.Drawing.Point(8, 232);	this.button1.Name = "button1";	this.button1.Size = new System.Drawing.Size(104, 40);	this.button1.TabIndex = 8;	this.button1.Text = "Send Payment";	this.button1.Click += new System.EventHandler(this.button1_Click);	// 	// button2	// 	this.button2.Location = new System.Drawing.Point(160, 232);	this.button2.Name = "button2";	this.button2.Size = new System.Drawing.Size(120, 40);	this.button2.TabIndex = 9;	this.button2.Text = "Process Payment";	this.button2.Click += new System.EventHandler(this.button2_Click);	// 	// Form1	// 	this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);	this.ClientSize = new System.Drawing.Size(292, 273);	this.Controls.Add(this.button2);	this.Controls.Add(this.button1);	this.Controls.Add(this.textBox4);	this.Controls.Add(this.textBox3);	this.Controls.Add(this.textBox2);	this.Controls.Add(this.textBox1);	this.Controls.Add(this.label4);	this.Controls.Add(this.label3);	this.Controls.Add(this.label2);	this.Controls.Add(this.label1);	this.Name = "Form1";	this.Text = "Form1";	this.ResumeLayout(false);}#endregion/// <summary>/// The main entry point for the application./// </summary>[STAThread]static void Main() {	Application.Run(new Form1());}private void button1_Click(object sender, System.EventArgs e){	Payment myPayment;  	myPayment.Payor = textBox1.Text;	myPayment.Payee = textBox2.Text;	myPayment.Amount = Convert.ToInt32(textBox3.Text);	myPayment.DueDate = textBox4.Text;	System.Messaging.Message msg = new System.Messaging.Message();	msg.Body=myPayment;	MessageQueue msgQ =new MessageQueue(".\\Private$\\billpay");	msgQ.Send(msg);}private void button2_Click(object sender, System.EventArgs e){	       MessageQueue msgQ = new MessageQueue(".\\Private$\\billpay");       Payment  myPayment=new Payment();       Object o=new Object();       System.Type[]  arrTypes=new System.Type [2];       arrTypes[0] = myPayment.GetType();       arrTypes[1] = o.GetType();       msgQ.Formatter = new XmlMessageFormatter(arrTypes);       myPayment=((Payment)msgQ.Receive().Body);		       StringBuilder sb = new StringBuilder();       sb.Append("Payment paid to: " + myPayment.Payor);       sb.Append("\n");       sb.Append("Paid by: " + myPayment.Payee);       sb.Append("\n");       sb.Append("Amount: $" + myPayment.Amount.ToString());       sb.Append("\n");       sb.Append("Due Date: " + Convert.ToDateTime(myPayment.DueDate));       MessageBox.Show(sb.ToString(), "Message Received!");}public struct Payment{	public string Payor,Payee;	public int Amount;	public string DueDate;	}}}
Observação O código deve ser alterado no Visual Studio 2005. Quando você cria um projeto Windows Forms, translation from VPE for Csharp Visual adiciona um formulário para o projeto por padrão. Este formulário é denominado Form1. Os dois arquivos que representam o formulário são denominados Form1.cs e Form1.Designer.cs. Tem de escrever seu código no Form1.cs. O ficheiro Designer.cs é onde o Windows Forms Designer escreve o código que implementa todas as ações que você executou adicionando controles. Para obter mais informações sobre o Windows Forms Designer no Visual translation from VPE for Csharp 2005, visite o seguinte site:back to the top

Verifique se o código

  1. No menu Debug , clique em Iniciar .
  2. Digite valores em cada caixa de texto e, em seguida, clique em Enviar Payment .
  3. Retornar ao console de gerenciamento do computador. Clique na pasta mensagens da fila em Filas particulares em billpay e, em seguida, verifique se que Microsoft Message Queuing recebeu uma mensagem (indicada por um ícone de envelope).
  4. Clique com o botão direito do mouse na mensagem, clique em Propriedades e, em seguida, clique na guia corpo . Você observar a mensagem de pagamento.

    Observação O conteúdo da mensagem pagamento é serializado como XML.
  5. Retornar para o pagamento de contas aplicativo do Windows e, em seguida, clique no botão Pagamento do processo . Você verá uma caixa de mensagem que confirma o recebimento de uma mensagem e exibe a mensagem.
back to the top

Solucionar problemas

  • A falta de uma fila particular geralmente é um problema somente no Windows 2000 e no Windows XP Professional. Windows 2000 Server e Windows XP Server permitem o uso da fila pública.
  • Passando argumentos corretos para XMLMessageFormatter() pode ser complicado. Neste exemplo, exceções são lançadas se o objeto ou os tipos de pagamento não estiverem incluídos na matriz de tipo passada para o construtor.
back to the top
Referências
Para obter mais informações sobre o enfileiramento de mensagens da Microsoft, visite os seguintes sites:
Mensagem Visão geral do serviço de enfileiramento de mensagens e recursos
http://technet2.microsoft.com/WindowsServer/en/library/1bee1f48-e2e5-4880-ac6f-f65130a6fe611033.mspx?mfr=trueMensagem de enfileiramento de mensagens Developer recursos
back to the top

Propriedades

ID do Artigo: 815811 - Última Revisão: 01/11/2007 06:51:28 - Revisão: 4.3

Microsoft Windows 2000 Server, Microsoft Windows 2000 Professional Edition, Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual C# .NET 2003 Standard Edition, Microsoft Windows XP Professional, Microsoft Message Queue Server (MSMQ) 1.0, Microsoft Visual C# 2005 Express Edition

  • kbmt kbserver kbforms kbwindowsforms kbhowtomaster KB815811 KbMtpt
Comentários