Microsoft 메시지 큐 Visual C#에서 읽고 쓰기 하는 방법

Windows XP에 대한 지원이 종료되었습니다.

Microsoft는 2014년 4월 8일 Windows XP에 대한 지원을 종료했습니다. 이러한 변경에 따라 해당 소프트웨어 업데이트 및 보안 옵션이 영향을 받습니다. 사용자에게 미치는 영향 및 계속 보호를 받는 방법에 대해 알아보십시오.

이 문서는 Microsoft 기계 번역 소프트웨어를 이용하여 번역되었으며 Microsoft Community에 의한 Community Translation Framework(CTF) 기술 혹은 사람이 번역한 내용에 의하여 사후 편집될 수 있습니다. Microsoft는 Knowledge Base에 있는 모든 문서에 다양한 언어로 접근할 수 있도록 하기 위하여 기계 번역, 사람에 의한 번역 및 커뮤니티가 편집한 내용을 모두 제공합니다. 번역된 문서는 어휘, 구문 및/혹은 문법에 오류가 있을 수 있습니다. Microsoft는 번역 오류로 인한 부정확성, 오류 및/또는 손해와 이를 고객이 사용하는 데에 대하여 책임을 지지 않습니다.

이 문서의 영문 버전 보기:815811
요약
이 문서는 다음과 같습니다.
  • 메시지를 작성 하 고 Windows 응용 프로그램에서 Microsoft 메시지 큐에 보낼 방법.
  • 방법과 개인 큐에서 읽은 메시지 내용을 표시할 역직렬화 할.
맨 위로

요구 사항

다음 항목은 권장 되는 하드웨어, 소프트웨어, 네트워크 인프라, 기술과 지식 및 필요한 서비스 팩 설명입니다.
  • Microsoft 메시지 큐가 설치 된 다음 운영 체제 중 하나 (4 operatingsystems 옵션으로 포함 되어): Windows 2000 Professional (또는 서버) 또는 Windows XPProfessional (또는 서버).
이 문서에는 다음에 익숙한 있다고 가정 합니다.
  • Microsoft 메시지 큐
  • 도구는 commandprompt에서 사용 하 여
맨 위로

Microsoft 메시지 큐에서 읽고 쓰기


System.Messaging 네임 스페이스는.NET Framework를 Microsoft 읽고 Microsoft 메시지 큐에 쓸 수 있어야 하는 클래스에 있습니다. 온라인 청구서 지불 시스템을 모방 하는 작은 Windows 응용 프로그램을 만들려면 다음과이 같이 하십시오.
  1. Microsoft Visual Studio.NET 또는 Microsoft Visual Studio 2005 엽니다.
  2. 새 Windows 응용 프로그램을 만들고 Visual C#, andthen 라는 이름을 MSMQ.
  3. Ifit Todisplay 솔루션 탐색기 표시 되지 않으면 CTRL + ALT + L을 누릅니다. 솔루션 탐색기에서 참조를 마우스 오른쪽 단추로 클릭 한 다음 참조 추가클릭 합니다.
  4. .NET 탭에서.dll 파일 목록에서 System.Messaging.dll파일을 선택 합니다. 선택을 클릭 한 다음 확인을 클릭 합니다.

    참고: Visual Studio 2005에서는 Dll 목록에 System.Messaging.dll파일 클릭 한 다음 확인을 클릭 합니다.
  5. Form1.cs는 디자인 보기에서에서 열려 있는 경우 열려 있지 않으면 솔루션 탐색기에서 Form1.cs두 번 클릭 합니다.
  6. 도구 상자를 열려면 CTRL + ALT + X를 누릅니다. 도구 상자에서 Windows Forms 탭을 클릭 합니다.
  7. 도구 상자에서 다음Form1의 가운데를 끕니다.
    • 4 각 레이블 anda 텍스트 상자 (각 레이블의 오른쪽에 배치) 행을.
    • Thelabels 텍스트 상자에서 두 개의 Button 컨트롤을 Form1끌어다 놓습니다.
  8. 컨트롤을 마우스 오른쪽 단추로 클릭 하 고속성을 클릭 후 아래 순서 대로 thelabels에 대 한 Text 속성을 설정:
    • 수취인:
    • 사용자 이름:
    • 금액:
    • 기한:
  9. 속성 대화 상자에서button1Text 속성에 대 한 지불 보내기설정 하 고 ProcessPayment으로 button2Text 속성을 설정 합니다.
  10. Mustfirst 하면 컴퓨터 관리 콘솔에서 만든 개인 큐를 사용 하 여 응용이 프로그램의 작동 합니다. 이렇게 하려면, 다음 단계를 수행하십시오.
    1. 바탕 화면에서 내 컴퓨터마우스 오른쪽 클릭 한 다음관리를 클릭 합니다.
    2. 메시지 큐를 찾을 수 Servicesand 응용 프로그램 노드를 확장 합니다.

      참고: 메시지 큐는 notfind이 경우 설치 되지 않습니다.
  11. MessageQueuing확장 개인 큐를 마우스 오른쪽 단추로새로 만들기를 가리킨 및 개인 큐를 클릭 합니다.
  12. 큐 이름 상자에 입력billpay를 선택한 다음 확인을 누릅니다.

    참고:트랜잭션 확인란을 선택 하지 마십시오. 메시지를 나중에 반환에 ComputerManagement 콘솔을 열어 둡니다.
  13. Form1 코드 맨 위에 있는 추가 System.Messaging 네임 스페이스와 System.Text 네임 스페이스에 있는 클래스를 포함 하도록 두 USINGstatements beforethe 클래스 선언을 추가 합니다. ( System.Text 네임 스페이스는 StringBuilder 클래스를 새로운 용도는.NET Framework 클래스의 사용에 대 한 문자열 youconcatenate.)
    using System.Messaging;using System.Text;
  14. 지불을 정의 하는 데이터를 저장할 변수를 포함 하는 구조체를 만듭니다. 구조를 만들려면 다음과 같은 codeafter Main 프로시저에 추가 합니다.
    public struct Payment{    public string Payor,Payee;    public int Amount;    public string DueDate;	}
  15. 다음 단계에 button1Click 이벤트에 코드를 추가 합니다.
    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 클래스의 인스턴스를 만들고 메시지 개체에 전달 하 여 Send 메서드를 호출. MessageQueue 클래스는 Microsoft 메시지 큐와 상호 작용을 관리 하는 래퍼.

      컴퓨터 관리 콘솔에서 만든 개인 큐의 경로를 설정 하는 구문을 확인 합니다. 개인 큐 machinename\Private$ \queuename양식을 걸립니다. 로컬 호스트 컴퓨터 점 또는 마침표 ("."로 표시 됨)를 사용 하 여 참조 됩니다.
      MessageQueue msgQ =new MessageQueue(".\\Private$\\billpay");msgQ.Send(msg);

      코드는 이제 Microsoft 메시지 큐에 메시지를 보낼 수 있습니다. .NET Framework XMLMessageFormatter 개체를 사용 하 여 자동으로 메시지를 serialize 합니다. 메시지를 보낼 때이 개체가 암시적으로 만들어집니다.
  16. 다음 단계에서 button2Click 이벤트에 코드를 추가 합니다. Button2_Click 이벤트 처리기를 받아서 button1 이벤트 처리기에서 issent를 지불 메시지를 처리 합니다.
    1. 첫 번째 코드 줄의 첫 번째 이벤트 처리기에 있는 코드 줄으로 같습니다.
      MessageQueue msgQ = new MessageQueue(".\\Private$\\billpay");
    2. XMLMessageFormatter 클래스에 전달할 수 있는 형식의 배열을 만듭니다.
      참고: 이 클래스 메시지를 받을 때 명시적으로 생성 되어야 합니다. XMLMessageFormatter 클래스의 생성자 형식 이름의 문자열 배열 또는, 가급적 이면 더 형식의 형식 배열을 사용합니다.
      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. 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));
    4. 결과 표시 하는 메시지 상자를 만듭니다.
      MessageBox.Show(sb.ToString(), "Message Received!");
맨 위로

전체 코드 (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 프로젝트를 만들면 C# 폼을 프로젝트에 추가 기본적으로. 이 폼 이름은 Form1입니다. 두 파일 형식을 나타내는 Form1.cs 및 form1. designer.cs 라는. Form1.cs에 코드를 작성 합니다. Designer.cs 파일을 여기서 Windows Forms 디자이너 작성 하는 모든 동작을 구현 하는 코드 컨트롤을 추가 하 여 수행 합니다. Visual C# 2005에서 Windows Forms 디자이너에 대 한 자세한 내용은 다음 Microsoft 웹 사이트를 방문 하십시오.맨 위로

코드를 확인 하십시오.

  1. 디버그 메뉴에서시작을 클릭 합니다.
  2. 각 텍스트 상자에 값을 입력 한 다음 지불 보내기를 클릭 합니다.
  3. 컴퓨터 관리 콘솔을 돌아갑니다. 개인 큐 에서 메시지를 대기열으로 폴더에서 billpay클릭 한 다음 해당 Microsoft 메시지 대기열 수신 메시지 (봉투 아이콘이 표시 됨)를 확인 합니다.
  4. 메시지를 마우스 오른쪽 단추로 클릭 하 고 속성을 클릭 다음 본문 탭을 클릭 합니다. 하면 noticethe 지불 메시지입니다.

    참고: 지불 메시지의 내용은 XML로 serialize 됩니다.
  5. Windows 응용 프로그램, 청구서 지불 돌아가서 다음 프로세스 지불 단추를 클릭 합니다. 메시지의 수신을 확인 하 고 메시지를 표시 하는 메시지 상자가 나타납니다.
맨 위로

문제 해결

  • 개인 큐의 부족은 Windows 2000 Professional 및 Windows XP Professional 에서만 generallyan 문제입니다. Windows2000 Server 및 Windows XP Server 공개 큐의 사용을 허용 합니다.
  • XMLMessageFormatter()에 올바른 인수를 전달 하는 것은 까다로울 수 있습니다. 이 예제에서는 개체 않거나 결제 theconstructor에 전달 된 형식 배열에 포함 되지 않은 하는 경우 예외가 throw 됩니다.
맨 위로
참조
Microsoft 메시지 큐에 대 한 자세한 내용은 다음 Microsoft 웹 사이트를 방문 하십시오.

경고: 이 문서는 자동으로 번역되었습니다.

속성

문서 ID: 815811 - 마지막 검토: 11/01/2015 03:14:00 - 수정: 5.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, Microsoft Visual C# 2005 Express Edition

  • kbserver kbforms kbwindowsforms kbhowtomaster kbmt KB815811 KbMtko
피드백