방법: 사용 이벤트 Visual Studio .NET 느슨하게

기술 자료 번역 기술 자료 번역
기술 자료: 318185 - 이 문서가 적용되는 제품 보기.
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
모두 확대 | 모두 축소

이 페이지에서

요약

이 단계별 가이드에서는 게시자, 구독자, 및 Microsoft COM + 서비스에서 느슨하게 연결된 이벤트를 처리하기 위한 인터페이스를 포함하는 .NET 어셈블리를 만들 수 있습니다.

요구 사항

다음은 권장되는 하드웨어, 소프트웨어, 네트워크 인프라 및 필요한 서비스 팩의 목록입니다.
  • Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows XP Professional 또는 Microsoft Windows XP 서버.
  • Microsoft .NET Framework입니다.
  • Microsoft Visual Studio .NET입니다.
  • Microsoft Visual C# .NET입니다.
  • Microsoft COM +입니다.
이 문서에서는 사용자가 다음 항목을 잘 알고 있다고 가정합니다.
  • COM 및 엔터프라이즈 서비스입니다.
  • 특성을 사용하여 메타데이터 확장.

해당 사용 느슨하게 연결된 이벤트 .NET 어셈블리 만들기

다음 절차에서는 게시자, 구독자, 및 COM + 서비스에서 이벤트 핸들을 느슨하게 인터페이스를 포함하는 .NET 어셈블리를 만듭니다.
  1. 시작 을 누르고, 프로그램, Visual Studio .NET 을 차례로 가리킨 다음 Visual Studio .NET 을 클릭하십시오.
  2. 새 프로젝트 를 클릭하십시오.
  3. 프로젝트 형식Visual C# 프로젝트 를 클릭하십시오.
  4. 템플릿Windows 응용 프로그램 을 선택하십시오.
  5. 이름 상자에 HowToLCE 를 입력한 다음 확인 을 누릅니다.

    이제 Windows Forms 응용 프로그램 셸 포함하는 솔루션 있습니다.
  6. 게시자와 구독자, 모두 공유 인터페이스에 대한 코드를 포함하는 클래스 라이브러리 만들기. 파일 메뉴에서 프로젝트 추가 를 가리킨 다음 새 프로젝트 를 클릭하십시오.
  7. 프로젝트 형식Visual C# 프로젝트 를 클릭하십시오.
  8. 템플릿클래스 라이브러리 를 클릭하십시오.
  9. 이름 상자에 ClassLibLCE 를 입력한 다음 확인 을 누릅니다.
  10. 솔루션 탐색기에서 ClassLibLCE, 참조 를 마우스 오른쪽 단추로 클릭한 다음 참조 추가 클릭하십시오.
  11. .NET 탭에서 참조System.EnterpriseServices 클릭한 다음 선택 을 클릭하십시오. 확인 을 클릭하십시오.
  12. 이러한 네임스페이스에 액세스 클래스를 Class1.cs 파일 맨 위에 다음 Using 지시문을 추가합니다:
    using System.EnterpriseServices;
    using System.Diagnostics;
    						
    클래스 라이브러리 구성 요소를 컴파일할 때, .NET 어셈블리 됩니다. 이를 등록한 후 게시자 및 구독자 EnterpriseServices.ServicedComponents() 에서 파생시키는 때문에 이를 COM + 에서 서비스를 실행할 수 있습니다.
  13. 이러한 두 클래스를 공유하는 인터페이스를 선언하십시오. Class1.cs 파일에 다음 코드를 공용 클래스 Class1 후 추가:
    public interface IEvSink
    {
    	void OnEvent1();
    	void OnEvent2();
    }
    					
  14. 게시자 클래스에 다음 코드를 공용 클래스 Class1 대체합니다:
    [EventClass]
    public class MyPublisher : ServicedComponent, IEvSink
    {
    	public MyPublisher()
    	{
    	// 
    	// TODO: Add constructor logic here.
    	// 
    	}
    	public void OnEvent1()
    	{}	
    	public void OnEvent2()
    	{}
    	}
    						
    앞의 클래스 [EventClass] 특성으로 데코레이팅된 알림. 이 특성은 매우 중요합니다. 이 클래스는 게시자 및 해당 subscriber(s) 사이의 연결을 구성하는 COM + 지시합니다. 이 문서의 모든 코드를 통해 작업한 경우 MyPublisher 클래스 없음 직접 호출을 나타나지 않습니다. 즉, 게시자와 구독자 간의 상호 작용은 COM + 서비스에서 [EventClass] 특성 사용하여 클래스의에 의해 처리됩니다. 따라서 게시자를 있는 subscriber(s) 모든 직접적인 지식을 있지 않습니다. IEvSink 인터페이스를 사용하는 이 응용 프로그램에 대한 COM + 서비스를 사용하여 등록된 구독자가 게시자에서 이벤트를 받을 수 있습니다.
  15. 클래스 라이브러리 필요한 코드 최종 비트 구독자에 대해 것입니다. 이 클래스는 게시자에 의해 발생한 이벤트를 처리합니다. 이 경우 간단한 항목이 게시된 인터페이스를 호출할 때 구독자는 알림을 표시하려면 이벤트 로그에서 확인합니다. MyPublisher 클래스 뒤에 다음 코드를 추가하여:
    public class MySubscriber : ServicedComponent, IEvSink
    {
    	EventLog ev = new EventLog("Application");
    
    	public void OnEvent1()
    	{
    		ev.Source = "ClassLibLCE";
    		ev.WriteEntry("OnEvent1 Fired");
    	}
    
    	public void OnEvent2()
    	{
    		ev.Source = "ClassLibLCE";
    		ev.WriteEntry("OnEvent2 Fired");
    	}
    }
    					
  16. 클래스 라이브러리에서 컴파일된 어셈블리를 사용하려면, 강력한 이름을 지정하십시오. 이 암호화 키 쌍을 만들려면 SN 도구를 (Sn.exe) 사용하십시오. .NET Framework 소프트웨어 개발자 키트 (SDK) 설명서가 설치되어 있는 \bin 폴더에 위치합니다. SN 도구가 매우 쉽게 사용할 수 있습니다. 명령줄 문을 다음 구문을 사용합니다.
    sn -k "C:\%DirectoryToPlaceKey%\%KeyName%.snk"
  17. Visual Studio .NET 명령 프롬프트에서 이 명령을 실행하십시오. 시작 을 누르고, 프로그램, Visual Studio .NET, Visual Studio .NET 도구 차례로 가리킨 다음 Visual Studio .NET 명령 프롬프트 를 클릭하십시오. 명령 프롬프트에서 다음을 입력하십시오.
    sn - k "C:\ClassLibLCE\key.snk"
    클래스 라이브러리 프로젝트를 이 경로에 없는 경우 클래스 라이브러리 프로젝트에 대한 프로젝트 폴더의 루트 경로를 변경하십시오.

    키가 생성됩니다. 이를 확인하려면 솔루션 탐색기에서 ClassLibLCE 선택하고 솔루션 탐색기 도구 모음에서 모든 파일 표시 단추를 클릭하십시오.

    ClassLibLCE에서 key.snk 항목을 확인할 수 있습니다.
  18. 이 키를 아직 클래스 라이브러리 어셈블리 연결되어 있기 때문에 이 연결을 만드십시오. 솔루션 탐색기에서 ClassLibLCE, AssemblyInfo.cs 두 번 클릭하십시오. AssemblyKeyFile 있는 기존 따옴표 사이에 다음과 같이 입력하십시오.
    "..\\..\\key.snk"
  19. 전체 솔루션 위한 코드가 클래스 라이브러리 Windows Form에 위로 배선에 의해 완료하십시오. 이 폼 데모 목적으로 단순히 있다는 것을 기억하십시오. "테스트 도구" 기본적으로 사용됩니다. 해당 참조를 추가하십시오.
    1. 솔루션 탐색기에서 HowToLCE, 참조 를 마우스 오른쪽 단추로 클릭한 다음 바로 가기 메뉴에서 참조 추가 클릭하십시오.
    2. .NET 탭에서 System.EnterpriseServices 을 클릭하십시오.
    3. 프로젝트 탭에서 ClassLibLCE 을 클릭하십시오.
    4. 선택 을 클릭하십시오.
    5. 확인 을 클릭하십시오.

      참조 아래에 나열된 System.EnterpriseServicesClassLibLCE 항목을 확인할 수 있습니다.
  20. 코드 편집기에서 Form1.cs [디자인] 탭을 클릭하고 Form의 Form1_Load 이벤트 처리기를 만들려면 아무 곳이나 두 번 클릭하십시오. 이 이벤트 처리기에 다음 코드를 추가하십시오.

    두 개의 섹션이 있습니다. 첫 번째 클래스 라이브러리 전적으로 등록하는 용도에 대한 것입니다. 한 번만 사용됩니다. 두 번째 게시자 이벤트를 트리거합니다.
    // Section #1
    // Register Class Library as a COM+ application.
        ClassLibLCE.MySubscriber l = new
        ClassLibLCE.MySubscriber ();
    
    // Section #2
    //  Call Events on Publisher
    //  ClassLibLCE.MyPublisher l = new ClassLibLCE.MyPublisher();
    //  l.OnEvent1();
    //  l.OnEvent2();
    					
  21. F5 키를 눌러 응용 프로그램을 실행하고 클래스 라이브러리 등록.

    이렇게 하려면 액세스할 수 있지만 아직 등록되지 COM + 서비스를 사용하여 구독자가 있습니다. 폼 로드한 후 닫습니다. 이 이를 COM + 서비스를 활용할 수 있도록 .NET 어셈블리 등록 중 가장 간단한 방법입니다. 그러나 이 방법으로 등록하려면 사용하면 관리 권한 가진 로컬 컴퓨터에 로그온해야 합니다. 응용 프로그램을 사용하는 사용자는 자신의 로컬 컴퓨터에 관리 권한이 없는 경우 응용 프로그램을 배포할 때 Regasm.exe 유틸리티에 대해 사용하여 어셈블리를 등록할 수 있습니다.
  22. 구성 요소 서비스 스냅인을 실행하십시오.

    버전 1.0 .NET 특성을 사용하여 위로 구독자를 설정할 수 없습니다. 하지만 수동으로 구성 요소 서비스 스냅인을 실행하여 이를 확인할 수 있습니다: 열기 제어판, 관리 도구 를 두 번 누른 다음 구성 요소 서비스 를 두 번 누릅니다.

    참고: 원하는 경우 다음 단계를 수행하여 COM + 1.0 관리 라이브러리를 사용하여 자동화 코드를 작성할 수 있습니다. 자세한 내용은 개체 브라우저에서 라이브러리 내용을 봅니다.
  23. 구성 요소 서비스 를 확장하십시오. 컴퓨터 를 확장하십시오. 내 컴퓨터 를 확장하십시오. COM + 응용 프로그램 을 확장하십시오. ClassLibLCE를 확장하십시오. 구성 요소를 확장하십시오. ClassLibLCE.MySubscriber를 확장하십시오.
  24. 구독 폴더를 마우스 오른쪽 단추로 클릭하고 새로 만들기를 가리킨 및 구독 을 클릭하십시오.
  25. COM + 새 구독 마법사에서 다음 을 클릭하십시오. IEvSink 인터페이스 구독 옵션을 선택하십시오. 다음 을 클릭하십시오.
  26. 이벤트 클래스 선택 페이지에서 ClassLibLCE.MyPublisher 를 클릭하십시오. 이 [EventClass] 특성으로 데코레이팅된 클래스가 있습니다. 다음 을 클릭하십시오.
  27. 이 구독을 즉시 사용 확인란을 선택한 다음 를 원하는 이름을 입력하십시오. 다음 을 클릭하십시오. 마침 을 클릭하십시오.

Class1.cs 파일에 대한 코드

using System;
using System.EnterpriseServices;
using System.Diagnostics;

namespace ClassLibLCE
{
       /// <summary>
       /// Summary description for Class1.
       /// </summary>
       [EventClass]
       public class MyPublisher : ServicedComponent, IEvSink
       {
	     public MyPublisher()
	     {
	     // 
	     // TODO: Add constructor logic here.
	     // 
	     }

	     public void OnEvent1()
	     {}	

	     public void OnEvent2()
	     {}
	     }

	     public class MySubscriber : ServicedComponent, IEvSink
	     {
		EventLog ev = new EventLog("Application");

		public void OnEvent1()
		{
			ev.Source = "ClassLibLCE";
			ev.WriteEntry("OnEvent1 Fired");
		}

		public void OnEvent2()
		{
			ev.Source = "ClassLibLCE";
			ev.WriteEntry("OnEvent2 Fired");
		}
	}

	public interface IEvSink
	{
		void OnEvent1();
		void OnEvent2();
	}
}
				

코드 AssemblyInfo.cs 파일

using System.Reflection;
using System.Runtime.CompilerServices;

// 
// General information about an assembly is controlled through the 
// following set of attributes. Change these attribute values to modify
// the information associated with an assembly.
// 
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]		

// 
// Version information for an assembly includes the following four 
// values:
//      Major Version
//      Minor Version 
//      Build Number
//      Revision
// 
// You can specify all the values or you can use the default Revision and 
// Build Numbers by using the '*', similar to this:

[assembly: AssemblyVersion("1.0.*")]

// 
// To sign your assembly, specify a key to use. For more 
// information about assembly signing, see the Microsoft .NET Framework 
// documentation.
// 
// Use the following attributes to control which key is used for signing. 
// 
// NOTES: 
//   (*) If no key is specified, the assembly is not signed.
//   (*) KeyName refers to a key that is installed in the Crypto Service
//       Provider (CSP) on your computer. KeyFile refers to a file that 
//       contains a key.
//   (*) If the KeyFile and the KeyName values are both specified, the 
//       following processing occurs:
//       (1) If the KeyName is found in the CSP, that key is used.
//       (2) If the KeyName does not exist and the KeyFile does exist, the 
//           key in the KeyFile is installed into the CSP and used.
//   (*) To create a KeyFile, you can use the Sn.exe (Strong Name) 
//       tool. When specifying the KeyFile, the location of the KeyFile 
//       must be relative to the project output folder which is
//       %Project Directory%\obj\<configuration>. For example, if your 
//       KeyFile is located in the project folder, specify the 
//       AssemblyKeyFile attribute as 
//          [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
//   (*) Delay Signing is an advanced option. For more information, see the 
//       Microsoft .NET Framework documentation.
// 
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("..\\..\\key.snk")]
[assembly: AssemblyKeyName("")]
				

Form1.cs 파일 코드

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace HowToLCE
{
	/// <summary>
	/// Summary description for Form1.
	/// </summary>
	public class Form1 : System.Windows.Forms.Form
	{
		/// <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 the
			// 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()
		{
			// 
			// Form1
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
			this.ClientSize = new System.Drawing.Size(292, 266);
			this.Name = "Form1";
			this.Text = "Form1";
			this.Load += new System.EventHandler(this.Form1_Load);

		}
		#endregion

		/// <summary>
		/// The main entry point for the application.
		/// </summary>
		[STAThread]
		static void Main() 
		{
			Application.Run(new Form1());
		}

		private void Form1_Load(object sender, System.EventArgs e)
		{
			//Section #1
			// Register Class Library as a COM+ application.
//			ClassLibLCE.MySubscriber l = new ClassLibLCE.MySubscriber();

			//Section #2
			// Call Events on Publisher.
				ClassLibLCE.MySubscriber l = new ClassLibLCE.MySubscriber();
						l.OnEvent1();
						l.OnEvent2();
		}
	}
}
				

작동 확인

  1. 코드 편집기 창에 있는 섹션 # 1 Form1.cs 파일의 코드 주석 및 섹션 # 2 코드의 주석 처리를 제거하십시오.
  2. 실행 파일을 HowToLCE 프로젝트의 경우에만 실행하십시오. 이렇게 하려면 빌드 메뉴에서 구성 관리자 를 클릭하십시오. ClassLibLCE에 대한 빌드 확인란의 선택을 취소하십시오. 닫기 를 클릭하십시오.
  3. 디버그 모드에서 응용 프로그램을 실행하려면 F5 키를 누릅니다.
  4. 양식이 로드되면 닫습니다.
  5. 서버 탐색기를 시작하려면 Ctrl + Alt + S를 누릅니다. 서버 를 확장하십시오. computer name 을 확장하십시오. 이벤트 로그 를 확장하십시오. 응용 프로그램 을 확장하십시오. ClassLibLCE를 확장하십시오.

    두 이벤트 로그 항목을 볼 수 있습니다.

문제 해결

  1. 이벤트 로그 엔트리를 서버 탐색기에서 보기 새로 고칩니다.
  2. 앞서 설명한 절차를 통해 실행한 후 클래스 라이브러리로 변경한 다음 클래스 라이브러리 다시 경우 가능성이 매우 높은 어셈블리 구성 요소 서비스에 의해 잠겨 있습니다. 이 문제를 해결하려면 다음 방법 중 하나를 사용하십시오.
    • 구성 요소 서비스에서 구성 요소를 마우스 오른쪽 단추로 클릭한 다음 종료 를 누릅니다.

      - 또는 -
    • 코드에 크게 변경해야 할 경우 구성 요소를 삭제하십시오.



참조

느슨하게 연결된 이벤트에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 방문하십시오.
Using Loosely Coupled Events
구성된 클래스를 구현하고 COM + 배포하는 방법에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 방문하십시오.

속성

기술 자료: 318185 - 마지막 검토: 2014년 2월 24일 월요일 - 수정: 3.3
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft .NET Framework Class Libraries 1.0
키워드:?
kbnosurvey kbarchive kbmt kbhowtomaster KB318185 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

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