ПРАКТИЧЕСКОЕ руководство. Использование слабо событий из Visual Studio .NET

Переводы статьи Переводы статьи
Код статьи: 318185 - Vizualiza?i produsele pentru care se aplic? acest articol.
Эта статья помещена в архив. Она предлагается "как есть" и обновляться не будет.
Развернуть все | Свернуть все

В этой статье

Аннотация

В этом пошаговом руководстве используется для создания сборки .NET, содержащий интерфейс для обработки свободно связанных событий в службах COM +, издателя и подписчика.

Требования

В приведенном ниже списке перечислены требования к оборудованию, сети, программному обеспечению и пакетам обновления.:
  • Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows XP Professional или Server Microsoft Windows XP.
  • Microsoft .NET Framework.
  • Microsoft Visual Studio .NET..
  • Microsoft Visual C# .NET.
  • Microsoft COM +.
При написании статьи предполагалось, что пользователь обладает достаточными знаниями в указанных ниже областях.:
  • COM и корпоративных служб.
  • Расширение метаданных с помощью атрибутов.

Создание сборки .NET, использование свободно связанных событий

Следующая процедура создает сборку .NET, содержащий интерфейс, что маркеры слабо события служб COM +, издателя и подписчика.
  1. затем –START ::, выберите пунктПрограммы, выберите пунктMicrosoft Visual Studio .NET.и выберите командуMicrosoft Visual Studio .NET..
  2. затем –Создание проекта.
  3. ВТипы проектовзатем –Проекты Visual C#.
  4. ВШаблоны:SelectПриложения Windows.
  5. В диалоговом окнеИМЯполе типаHowToLCEи выберите командуOk..

    Теперь имеется решение, содержащее оболочки в приложении Windows Forms.
  6. Создание библиотеки классов, содержащий код для интерфейса, который является общим для обоих, издателя и подписчика. в менюФайл:Выберите пункт менюДобавление проектаи выберите командуСоздание проекта.
  7. ВТипы проектовзатем –Проекты Visual C#.
  8. ВШаблоны:затем –Библиотека классов.
  9. В диалоговом окнеИМЯполе типаClassLibLCEи выберите командуOk..
  10. В обозревателе решений в областиClassLibLCE, щелкните правой кнопкой мышиСсылкии выберите командуДобавление ссылки.
  11. в меню.netвкладки в областиСсылкизатем –System.EnterpriseServicesи выберите командуSelect. затем –Ok..
  12. Добавьте следующуюС помощьюдирективы в верхней части файл Class1.cs, чтобы получить доступ к классам в этих пространствах имен:
    using System.EnterpriseServices;
    using System.Diagnostics;
    						
    При компиляцииБиблиотека классовкомпонент, он становится сборку .NET. После регистрации, можно запустить ее в списке служб COM + из-за издателя и подписчика являются производными отEnterpriseServices.ServicedComponents().
  13. Объявите интерфейс, который будет совместно использовать эти классы. В файле Class1.cs добавьте следующий код после открытого классаClass1:
    public interface IEvSink
    {
    	void OnEvent1();
    	void OnEvent2();
    }
    					
  14. Заменить открытый классClass1with the following code for the Publisher class:
    [EventClass]
    public class MyPublisher : ServicedComponent, IEvSink
    {
    	public MyPublisher()
    	{
    	// 
    	// TODO: Add constructor logic here.
    	// 
    	}
    	public void OnEvent1()
    	{}	
    	public void OnEvent2()
    	{}
    	}
    						
    Notice the preceding class is decorated with the [EventClass] attribute. This attribute is critical. It tells COM+ Services that this class forms the connection between the publisher and its subscriber(s). When you have worked through all the code in this article, notice that there are no direct calls to the MyPublisher class. In other words, the interaction between publisher and subscriber is handled by COM+ Services by the class with the [EventClass] attribute. Therefore, the publisher does not have any direct knowledge of the subscriber(s). Any subscriber registered with COM+ Services for this application that uses the IEvSink interface can receive events from the publisher.
  15. The final bit of code required in the Class Library is for the subscriber. This class handles the events fired by the publisher. In this case, you make a simple entry in the Event Log to show that the subscriber is notified when a call is made to the published interface. Add the following code after theMyPublisherКласс::
    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. To use the assembly compiled from the Class Library, give it a strong name. To generate this cryptographic key pair, use the SN tool (Sn.exe). It is located in the \bin folder where the .NET Framework Software Developer's Kit (SDK) documentation is installed. The SN Tool is very easy to use. The command line statement uses the following syntax:
    sn -k "C:\%DirectoryToPlaceKey%\%KeyName%.snk"
  17. Run this command from the Visual Studio .NET command prompt. затем –START ::, выберите пунктПрограммы, выберите пунктMicrosoft Visual Studio .NET., выберите пунктСредства Visual Studio .NETи выберите командуКомандная строка Visual Studio .NET. At the command prompt, type the following:
    sn -k "C:\ClassLibLCE\key.snk"
    If your Class Library project is not in this path, change the path to the root of the project folder for your Class Library project.

    A key is generated. To verify this, in Solution Explorer, selectClassLibLCEи перейдите на вкладкуПоказать все файлыкнопка наВ обозревателе решенийПанель инструментов.

    Notice the key.snk item under ClassLibLCE.
  18. Because this key is not yet associated with the Class Library assembly, create this association. In Solution Explorer, underClassLibLCEДвойной щелчокAssemblyInfo.cs. ВAssemblyKeyFile, type the following between the existing quotation marks:
    "..\\..\\key.snk"
  19. Complete the code for the whole solution by wiring up a Windows Form to the Class Library. Remember that this Form is merely for demonstration purposes. It basically serves as a "test harness". Add the appropriate references.
    1. In Solution Explorer, underHowToLCE, щелкните правой кнопкой мышиСсылкии выберите командуДобавление ссылкив контекстном меню.
    2. в меню.netЩелкнитеSystem.EnterpriseServices.
    3. в менюПроектыЩелкнитеClassLibLCE.
    4. затем –Select.
    5. затем –Ok..

      Обратите вниманиеSystem.EnterpriseServicesиClassLibLCEitems listed underСсылки.
  20. In the Code Editor, click theForm1.cs [Design]tab. Double-click anywhere on the Form to create aForm1_Loadобработчик событий. To this event handler add the following code.

    Notice that there are two sections. The first is solely for the purpose of registering the Class Library. It is used only one time. The second triggers the publisher events.
    // 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. Press F5 to run the application and register the Class Library.

    This makes the subscriber accessible to, but not yet registered with, COM+ Services. After the Form loads, close it. This is the simplest method of registering a .NET Assembly so that it can take advantage of COM+ Services. However, to register in this manner you must be logged on to the local computer with Administrative rights. If users who use your application do not have Administrative rights to their local computer, you can register an assembly by using the Regasm.exe utility for them when you deploy the application.
  22. Run the Component Services snap-in.

    You cannot set up subscribers by using attributes in .NET version 1.0. But, you can do this manually by running the Component Services snap-in: Opencontrol panelДвойной щелчокАдминистрирование, а затем дважды щелкните значокСлужбы компонентов.

    Примечание.: If you want, you can write code to automate the following steps by using the COM+ 1.0 Admin Library. For additional information, view the Library contents in the Object Browser.
  23. expandСлужбы компонентов. expandКомпьютеры. expandМой компьютер. expandПриложения COM +. expandClassLibLCE. expandComponents:. expandClassLibLCE.MySubscriber.
  24. , щелкните правой кнопкой мыши объектSubscriptionsПапка, выберите пунктСОЗДАТЬ.и выберите командуПодписка;.
  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();
		}
	}
}
				

Проверить Works

  1. В окне редактора кода закомментируйте код в раздел # 1 в файле Form1.cs и раскомментируйте код в раздел 2.
  2. Запустите только исполняемые HowToLCE проекта. Для этого нажмите кнопкуДиспетчер конфигурацийв менюПостроениеменю. ОчиститьПостроениефлажокClassLibLCE. затем –Закрыть.
  3. Нажмите клавишу F5 для запуска приложения в режиме отладки.
  4. При загрузке формы, закройте его.
  5. Нажмите сочетание клавиш CTRL + ALT + S, чтобы запустить обозреватель серверов. expandservers. expandИмя компьютера.. expandЖурналы событий. expandПриложение. expandClassLibLCE.

    Обратите внимание, две записи журнала событий.

ПОИСК И УСТРАНЕНИЕ НЕПОЛАДОК

  1. Обновление журнала событий для просмотра операций в обозревателе серверов.
  2. Если внести изменения в библиотеке классов после выполнения описанных процедур, а затем перестройте библиотеку классов является скорее всего, блокировки сборки служб компонентов. To work around this, use either of the following methods:
    • Right-click the component inСлужбы компонентови выберите командуЗавершение работы.

      -ИЛИ-
    • Delete the component if you want to make significant changes to your code.



Ссылки

For additional information about loosely coupled events, visit the following Microsoft Web site:
Using Loosely Coupled Events
For additional information about how to implement and deploy COM+ configured classes, visit the following Microsoft Web site:

Свойства

Код статьи: 318185 - Последний отзыв: 21 февраля 2014 г. - Revision: 2.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Visual Studio .NET 2002 Professional Edition
Ключевые слова: 
kbnosurvey kbarchive kbhowtomaster kbmt KB318185 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:318185

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