วิธีการเขียน และอ่านจาก Queuing ข้อความ Microsoft ใน Visual c#

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 815811 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

บทความนี้อธิบายต่อไปนี้:
  • วิธีการสร้างข้อความ และส่งไปยังการจัดคิวข้อความ Microsoft ในแอพลิเคชันของ Windows
  • วิธี การอ่านจากคิวส่วนตัว และ deserialize เนื้อหาของข้อความสำหรับการแสดงผล

ความต้องการ

รายการต่อไปนี้อธิบายฮาร์ดแวร์ที่แนะนำ ซอฟต์แวร์ โครงสร้างพื้นฐานของเครือข่าย ทักษะ และทราบ และเซอร์วิสแพ็คที่จำเป็นต้องใช้:
  • ระบบปฏิบัติการต่อไปนี้กับ Microsoft ข้อความ Queuing ติดตั้งอย่างใดอย่างหนึ่ง (จะรวมเป็นตัวเลือกระบบปฏิบัติการทั้งสี่): Windows 2000 Professional (หรือเซิร์ฟเวอร์), Windows XP Professional (หรือเซิร์ฟเวอร์)
บทความนี้ยังอนุมานว่า คุณไม่คุ้นเคยกับข้อความต่อไปนี้:
  • การจัดคิวข้อความของ Microsoft
  • การใช้เครื่องมือจากพร้อมต์คำสั่ง

เขียน และอ่านจากการจัดคิวข้อความของ Microsoft


กระบวนการSystem.Messagingnamespace ใน Framework Microsoft .NET ได้ระดับชั้นที่คุณต้องการอ่านจาก และเขียนไปยังการจัดคิวข้อความ Microsoft เมื่อต้องการสร้างโปรแกรมประยุกต์ Windows ขนาดเล็กที่เลียนแบบระบบการชำระเงินที่ออนไลน์ ดำเนินการดังต่อไปนี้:
  1. เปิด Microsoft Visual Studio .NET หรือ Microsoft Visual Studio 2005
  2. สร้างโปรแกรมประยุกต์ของ Windows ใหม่ใน Visual c# และจากนั้น ตั้งชื่อmsmq.
  3. เมื่อต้องการแสดง Explorer โซลูชันถ้าจะไม่ปรากฏขึ้นมา กด CTRL + ALT + L คลิกขวาใน Explorer โซลูชันอ้างอิง:แล้ว คลิกเพิ่มการอ้างอิง.
  4. ในการ.NETแท็บ การเลือกนั้นSystem.Messaging.dllแฟ้มในรายการของแฟ้ม.dll คลิกเลือกแล้ว คลิกตกลง.

    หมายเหตุ:ใน Visual Studio 2005 คลิกการSystem.Messaging.dllแฟ้มในรายการของ DLLs และจากนั้น คลิกตกลง.
  5. มีการเปิดใน Form1.csออกแบบมุมมอง ถ้าคุณไม่เปิด คลิกสองครั้งForm1.csในการ Explorer โซลูชัน
  6. กด CTRL + ALT + X เพื่อเปิดกล่องเครื่องมือ ในการกล่องเครื่องมือคลิกการแบบฟอร์ม windowsแท็บ
  7. จากนั้นกล่องเครื่องมือลากต่อไปนี้เพื่อกลางของform1:
    • 4 แถวแต่ละตัวป้ายชื่อและยังกล่องข้อความ(อยู่ทางด้านขวาของแต่ละป้ายผนึก)
    • ภายใต้ป้ายชื่อและกล่องข้อความ ลากสองปุ่มตัวควบคุมไปยังform1.
  8. คลิกขวาที่ตัวควบคุม คลิกคุณสมบัติจากนั้น ตั้งค่านี้ข้อความคุณสมบัติสำหรับการต่อไปนี้ (ในใบสั่ง) ป้ายชื่อ:
    • การชำระค่าจ้างไปยัง:
    • ชื่อ::
    • ยอดเงิน:
    • วันครบกำหนด:
  9. ในการคุณสมบัติกล่องโต้ตอบกล่อง การตั้งค่านี้ข้อความคุณสมบัติของbutton1เมื่อต้องการส่งการชำระเงินและตั้งค่านี้ข้อความคุณสมบัติของbutton2เมื่อต้องการดำเนินการชำระเงิน.
  10. โปรแกรมประยุกต์นี้ทำงานร่วมกับคิวส่วนตัวที่คุณต้องสร้างก่อนในคอนโซลการจัดการคอมพิวเตอร์ โดยให้ทำตามขั้นตอนต่อไปนี้::
    1. บนเดสก์ท็อป คลิกขวาMy Computerแล้ว คลิกจัดการ.
    2. ขยายการบริการและโปรแกรมประยุกต์โหนดเพื่อค้นหาการจัดคิวข้อความ

      หมายเหตุ:หากคุณไม่สามารถพบการจัดคิวข้อความ นั้นไม่ติดตั้ง
  11. ขยายการจัดคิวข้อความคลิกขวาQueues ส่วนตัวชี้ไปที่ใหม่แล้ว คลิกคิวส่วนตัว.
  12. ในการชื่อคิวกล่อง ชนิดbillpayแล้ว คลิกตกลง.

    หมายเหตุ:ไม่ได้เลือกนั้นของทรานแซคชันกล่องกาเครื่องหมาย ออกจากคอมพิวเตอร์ที่จัดการคอนโซลเปิดได้เนื่องจากคุณกลับไปไว้ในภายหลังเพื่อดูข้อความ
  13. ที่ด้านบนของรหัสใน Form1 เพิ่มสองโดยใช้คำสั่งก่อนที่จะประกาศคลารวมคลาสเพิ่มเติมที่อยู่ในนั้นSystem.Messagingnamespace และSystem.Textnamespaces (System.Textnamespace มีไว้สำหรับการใช้การStringBuilderคลา คลา.NET Framework ใหม่ที่เป็นการดีที่สุดที่จะใช้เมื่อคุณ concatenate สตริงการ)
    using System.Messaging;
    using System.Text;
    
  14. สร้างโครงสร้างที่ประกอบด้วยตัวแปรเพื่อเก็บข้อมูลที่กำหนดชำระเงิน เมื่อต้องการสร้างโครงสร้าง เพิ่มโค้ดต่อไปนี้หลังจากหลักขั้นตอน:
    public struct Payment
    {
        public string Payor,Payee;
        public int Amount;
        public string DueDate;	
    }
  15. เพิ่มรหัสในขั้นตอนต่อไปนี้เพื่อคลิกเหตุการณ์ของbutton1.
    1. กำหนดคุณสมบัติของโครงสร้างเป็นค่าขององค์ประกอบของแบบฟอร์มต่อไปนี้:
      Payment myPayment;  
      myPayment.Payor = textBox1.Text;
      myPayment.Payee = textBox2.Text;
      myPayment.Amount = Convert.ToInt32(textBox3.Text);
      myPayment.DueDate = textBox4.Text;
    2. สร้างอินสแตนซ์ของการข้อความคลา และจากนั้น ตั้งค่านี้bodyคุณสมบัติที่เป็นโครงสร้างการชำระเงิน:
      System.Messaging.Message msg = new System.Messaging.Message();
      msg.Body=myPayment;
    3. เมื่อต้องการส่งข้อความการจัดคิวข้อความ Microsoft สร้างอินสแตนซ์ของการMessageQueueคลาและการเรียกส่งวิธีการที่ส่งผ่านในการข้อความวัตถุ กระบวนการMessageQueueคลาสที่มี wrapper ที่จัดการกับการโต้ตอบกับการจัดคิวข้อความของ Microsoft

      สังเกตไวยากรณ์การกำหนดเส้นทางของคิวส่วนตัวที่คุณสร้างในคอนโซลการจัดการคอมพิวเตอร์ คิวส่วนตัวที่ใช้แบบฟอร์มmachinename\Private $ \queuename. มีการอ้างอิงเครื่องโฮสต์ท้องถิ่นกับจุดหรือรอบระยะเวลา (แสดงเป็น".").
      MessageQueue msgQ =new MessageQueue(".\\Private$\\billpay");
      msgQ.Send(msg);

      รหัสการส่งข้อความการจัดคิวข้อความ Microsoft อยู่ในขณะนี้ .NET Framework serializes ข้อความโดยอัตโนมัติ โดยใช้การXMLMessageFormatterวัตถุ วัตถุนี้ implicitly ถูกสร้างเมื่อมีส่งข้อความ
  16. เพิ่มรหัสในขั้นตอนต่อไปนี้เพื่อคลิกเหตุการณ์ของbutton2. กระบวนการbutton2_Clickตัวจัดการเหตุการณ์รับ และการประมวลผลข้อความการชำระเงินที่ส่งไปในการbutton1ตัวจัดการเหตุการณ์
    1. บรรทัดแรกของรหัสจะเหมือนกับบรรทัดของรหัสที่อยู่ในตัวจัดการเหตุการณ์แรก:
      MessageQueue msgQ = new MessageQueue(".\\Private$\\billpay");
    2. สร้างอาร์เรย์ของชนิดการส่งต่อไปนี้XMLMessageFormatterคลาสที่
      หมายเหตุ:คลาสนี้ต้องได้สร้างเมื่อได้รับข้อความ ตัวสร้างของXMLMessageFormatterคลาสที่จะเป็นอาร์เรย์เป็นสตริงที่ชื่อชนิดหรือ มาก preferably อาร์เรย์ชนิดของชนิด:
      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);
      บอกเหล่านั้นXMLMessageFormatterวิธีการ deserialize ข้อความ
    3. มีรับข้อความ โดยการเรียกได้รับข้อความวิธีการ การเข้าถึงbodyคุณสมบัติการอ่านเนื้อหาของข้อความ กระบวนการ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));
    4. Create a message box to display the results:
      MessageBox.Show(sb.ToString(), "Message Received!");

Complete Code Listing (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;	
}

}
}
หมายเหตุ:รหัสควรเปลี่ยนแปลงใน Visual Studio 2005 เมื่อคุณสร้างโครงการ Windows Forms, Visual c# เพิ่มฟอร์มหนึ่งโครงการ โดยค่าเริ่มต้น แบบฟอร์มนี้เป็นชื่อ Form1 มีการตั้งชื่อแฟ้มที่สองที่แสดงแบบฟอร์ม Form1.cs และ Form1.designer.cs คุณสามารถเขียนรหัสของคุณใน Form1.cs แฟ้ม Designer.cs คือ ซึ่งผู้ออกแบบฟอร์ม Windows เขียนรหัสที่ใช้การดำเนินการทั้งหมดที่ คุณดำเนินการ โดยการเพิ่มตัวควบคุม สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการออกแบบฟอร์ม Windows ใน Visual 2005 c# แวะไปที่เว็บไซต์ต่อไปนี้ของ Microsoft:
http://msdn2.microsoft.com/en-us/library/ms173077.aspx

Verify the Code

  1. ในการตรวจแก้จุดบกพร่องเมนู คลิกเริ่มการทำงาน.
  2. Type values in each text box, and then clickSend Payment.
  3. Return to the Computer Management console. คลิกการQueue messagesfolder inPrivate Queuesภายใต้billpayแล้ว ตรวจสอบว่า การจัดคิวข้อความ Microsoft ได้รับข้อความ (ระบุ โดยไอคอนซองจดหมาย)
  4. คลิกขวาที่ข้อความ คลิกคุณสมบัติแล้ว คลิกการbodyแท็บ คุณสังเกตเห็นข้อความการชำระเงิน

    หมายเหตุ:เนื้อหาของข้อความการชำระเงินถูก serialized เป็น XML
  5. กลับไปที่การชำระเงินจากโปรแกรมประยุกต์ Windows และจากนั้น คลิกการขั้นตอนการชำระเงินปุ่ม คุณเห็นกล่องข้อความ ที่ยืนยันการรับของข้อความแสดงข้อความ

แก้ไข

  • ไม่มีคิวส่วนตัวได้โดยทั่วไปมีปัญหาใน Windows 2000 Professional และ Windows XP Professional เท่านั้น windows 2000 Server และ Windows XP Server อนุญาตให้ใช้คิวสาธารณะ
  • การส่งผ่านอาร์กิวเมนต์ที่ถูกต้องการXMLMessageFormatter()สามารถเป็น tricky ในตัวอย่างนี้ ข้อยกเว้นมี thrown ถ้าวัตถุหรือชนิดการชำระเงินไม่รวมอยู่ในอาร์เรย์ชนิดที่ผ่านไปยังตัวสร้าง

ข้อมูลอ้างอิง

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการจัดคิวข้อความ Microsoft แวะไปที่เว็บไซต์ต่อไปนี้ของ Microsoft:
ข้อความภาพรวม Queuing และทรัพยากร
http://technet2.microsoft.com/WindowsServer/en/library/1bee1f48-e2e5-4880-ac6f-f65130a6fe611033.mspx?mfr=trueข้อความสำหรับนักพัฒนา Queuing ทรัพยากร

คุณสมบัติ

หมายเลขบทความ (Article ID): 815811 - รีวิวครั้งสุดท้าย: 14 มกราคม 2554 - Revision: 3.0
ใช้กับ
  • 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 Edition
  • Microsoft Visual C# 2005 Express Edition
Keywords: 
kbserver kbforms kbwindowsforms kbhowtomaster kbmt KB815811 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:815811

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com