NASıL YAPıLıR: Kullanım olayları Visual Studio .NET gevşek

Makale çevirileri Makale çevirileri
Makale numarası: 318185 - Bu makalenin geçerli olduğu ürünleri görün.
Bu makale arşivlenmiştir. "Olduğu gibi" sunulmaktadır ve bundan sonra güncelleştirilmeyecektir.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu adım adım kılavuzda, bir yayımcı, bir abone ve Microsoft COM + Hizmetleri, gevşek eşleşmiş olayları işlemek için bir arabirim içeren bir .NET derlemesi oluşturmak için kullanın.

Gereksinimler

Aşağıdaki listede, gereksinim duyacağınız donanım, yazılım, ağ altyapısı ve hizmet paketleri önerilmektedir:
  • Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows XP Professional veya Microsoft Windows XP Server.
  • Microsoft .NET framework'nı tıklatın.
  • Microsoft Visual Studio. NET'i.
  • Microsoft Visual C# .NET.
  • Microsoft COM +.
Bu makalede, aşağıdaki konularda bilgi sahibi olduğunuz varsayılmaktadır:
  • COM ve Kurumsal Hizmetler.
  • Öznitelikleri kullanarak meta veri genişletme.

Bir .NET derlemesi kullanır, gevşek eşleşmiş olayları oluştur

Aşağıdaki yordam, bir yayımcı, bir abone ve arabirim tanıtıcıları olayları COM + Hizmetleri, gevşek şekilde içeren bir .NET derlemesi oluşturur:
  1. Başlat ' ı tıklatın, Programlar ' ın üzerine gelin, Visual Studio.NET ' i işaretleyin ve Visual Studio.NET</a1>'ı tıklatın.
  2. Yeni Proje'yi tıklatın.
  3. Project TypesVisual C# Projects ' ı tıklatın.
  4. Şablonlar, Windows Application ' ı seçin.
  5. Adı kutusuna, HowToLCE yazın ve Tamam ' ı tıklatın.

    Artık Windows Forms uygulaması Kabuk içeren bir çözüm vardır.
  6. Yayımcı, abone ve her ikisi için de paylaşılan arabirim için kod içeren bir sınıf kitaplığı oluşturun. Dosya menüsünde Add Project gelin ve sonra New Project ' ı tıklatın.
  7. Project TypesVisual C# Projects ' ı tıklatın.
  8. Şablonlar, Sınıf kitaplığı ' nı tıklatın.
  9. Adı kutusuna, ClassLibLCE yazın ve Tamam ' ı tıklatın.
  10. Solution Explorer'da (Çözüm Gezgini), altında ClassLibLCE, Başvurular ' ı sağ tıklatın ve Add Reference</a1>'ı tıklatın.
  11. Başvurular altında <a1>.NET</a1> sekmesinde System.EnterpriseServices'ı ' ı tıklatın ve sonra da <a2>Seç</a2>'i tıklatın. Tamam ' ı tıklatın.
  12. Aşağıdaki kullanma yönergeleri Class1.cs dosyasının en üstünde bu ad erişim sınıflarda ekleyin:
    using System.EnterpriseServices;
    using System.Diagnostics;
    						
    Class Library bileşeni derleme, bir .NET derlemesi olur. Siz kaydettikten sonra yayıncı ve abone EnterpriseServices.ServicedComponents() türetmek için COM + Hizmetleri altında çalıştırabilirsiniz.
  13. Bu iki sınıf paylaşacak arabirimi bildirin. Class1.cs dosyasında genel sınıf Class1 sonra aşağıdaki kodu ekleyin:
    public interface IEvSink
    {
    	void OnEvent1();
    	void OnEvent2();
    }
    					
  14. Aşağıdaki kod Publisher sınıfı için genel sınıf Class1 yerine:
    [EventClass]
    public class MyPublisher : ServicedComponent, IEvSink
    {
    	public MyPublisher()
    	{
    	// 
    	// TODO: Add constructor logic here.
    	// 
    	}
    	public void OnEvent1()
    	{}	
    	public void OnEvent2()
    	{}
    	}
    						
    önceki sınıf [EventClass] özniteliği ile donatılmış bildirimi. Bu özniteliği önemlidir. COM + Hizmetleri bu sınıfı, yayımcı, subscriber(s) arasındaki bağlantıyı oluşturan bildirir. Bu makaledeki kod aracılığıyla çalıştığı zaman, MyPublisher sınıfına doğrudan hiçbir çağrı olduğuna dikkat edin. Diğer bir deyişle, yayımcı ve abone arasındaki etkileşim [EventClass] özniteliğine sahip sınıf COM + Hizmetleri tarafından yapılmaktadır. Bu nedenle, yayımcı subscriber(s), doğrudan herhangi bilgi yok. COM + Hizmetleri IEvSink arabirimini kullanan bu uygulama için kaydedilen tüm abone olayları yayımcıdan alabilir.
  15. Son sınıf kitaplığı gerekli kod için abone bitidir. Bu sınıf, yayımcı tarafından harekete olayları işler. Bu durumda, olay günlüğüne bir çağrı yayımlanmış arabirime yapıldığı zaman abone bildirilir göstermek için basit bir giriş yapın. MyPublisher sınıfı sonra aşağıdaki kodu ekleyin:
    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. Sınıf kitaplığı derlenen derleme kullanmak için <a0></a0>, güçlü bir ad verin. Bu şifreleme anahtar çiftini üretmek için <a0></a0>, SN aracını (Sn.exe) Ek Yardım düğmesini kullanın. Bu işlem, .NET Framework yazılım geliştirme seti (SDK) belgelerine'nin yüklü olduğu bir \bin klasöründe bulunur. Kullanımı çok kolay SN araçtır. Komut satırı deyimi aşağıdaki sözdizimini kullanır:
    sn -k "C:\%DirectoryToPlaceKey%\%KeyName%.snk"
  17. Bu komut, Visual Studio. NET'in komut isteminden çalıştırın. Başlat ' ı tıklatın, Programlar ' ın üzerine gelin, Visual Studio.NET ' i işaretleyin, Visual Studio .NET araçları ' nın üzerine gelin ve Visual Studio .NET komut istemi ' ni tıklatın. Komut isteminde, aşağıdakini yazın:
    sn -k "C:\ClassLibLCE\key.snk"
    Sınıf kitaplığı projenizde bu yolda değilse, kök Class Library projeniz için <a1>Proje</a1> klasörünün yolunu değiştirin.

    Bir anahtarı oluşturulur. Bu, Solution Explorer'da doğrulamak için <a0></a0>, ClassLibLCE seçin ve sonra Solution Explorer araç çubuğunda <a2>Tüm dosyaları göster</a2> düğmesini tıklatın.

    Key.snk maddenin ClassLibLCE altında dikkat edin.
  18. Bu anahtar henüz Class Library derlemesi ile ilişkili olduğundan, bu ilişki oluşturun. Solution Explorer'da (Çözüm Gezgini), ClassLibLCE altında AssemblyInfo.cs ' ni çift tıklatın. AssemblyKeyFile içinde varolan tırnak işareti arasına aşağıdakileri yazın:
    "..\\.."\\key.snk
  19. Tüm çözüm kodunu bağlantı kurmak için sınıf kitaplığı, bir Windows formu doldurun. Bu form yalnızca gösterim amaçlı olduğunu unutmayın. Temel olarak "sınama donanımı" hizmet verir. Ilgili başvuru ekleyin.
    1. Solution Explorer'da (Çözüm Gezgini), altında HowToLCE, Başvurular ' ı sağ tıklatın ve sonra da kısayol menüsünde Add Reference ' ı tıklatın.
    2. .NET</a0> sekmesinde, System.EnterpriseServices'ı tıklatın.
    3. Projeler sekmesinde ClassLibLCE ' ı tıklatın.
    4. Seç ' i tıklatın.
    5. Tamam ' ı tıklatın.

      Başvurular altında listelenen öğeleri System.EnterpriseServices'ı ve ClassLibLCE dikkat edin.
  20. Kod düzenleyicisinde Form1.cs [Tasarım] sekmesini çift tıklatıldığında formdaki bir <a0>Form1_Load</a0> olay işleyicisi oluşturmak için herhangi bir yeri tıklatın. Bu olay işleyicisine aşağıdaki kodu ekleyin.

    Iki bölümü olduğuna dikkat edin. Yalnızca sınıf kitaplığı kaydettiriliyor amacıyla sunucudur. Bu, yalnızca bir kez kullanılır. Yayımcı olayları ikinci tetikler.
    // 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. Uygulamayı çalıştırın ve sınıf kitaplığı kaydetmek için F5 tuşuna basın.

    Erişilebilir, ancak henüz kaydedilmemiş olan, COM + Hizmetleri abone yapar. Form yükler, sonra kapatın. Böylece, COM + Hizmetleri yararlanabilirsiniz bir .NET derlemesi kaydediliyor en basit yöntemi budur. Ancak, bu biçimde kaydetmek için yerel bilgisayara Yönetim haklarıyla oturum açmalısınız. Uygulamanızın kullanan kullanıcılar, yerel bilgisayarda yönetim haklarına sahip, derleme uygulama dağıtırken regasm.exe yardımcı programı için bunları kullanarak kaydedebilirsiniz.
  22. Bileşen Hizmetleri ek bileşenini çalıştırın.

    Sürüm 1.0. NET'te özniteliklerini kullanarak aboneleri ayarlanamaz. Ancak, bunu el ile Bileşen Hizmetleri ek bileşenini çalıştırarak yapabilirsiniz: açık Denetim Masası ' nı tıklatın, Yönetimsel Araçlar ' ı çift tıklatın ve Bileşen Hizmetleri</a5>'ni çift tıklatın.

    Not: istiyorsanız, aşağıdaki adımları, COM + 1.0 yönetim Kitaplığı'nı kullanarak otomatikleştirmek için kod da yazabilirsiniz. Ek bilgi için nesne tarayıcı içinde kitaplığı içeriğini görüntüleyin.
  23. Component Services ' ı genişletin. Bilgisayarlar ' ı genişletin. Bilgisayarım ' ı genişletin. COM + uygulamaları ' nı genişletin. ClassLibLCE genişletin. Bileşenleri ' ni genişletin. ClassLibLCE.MySubscriber genişletin.
  24. Abonelik klasörü sağ tıklatın, Yeni ' nin üzerine gelin ve Abonelik</a1>'ı tıklatın.
  25. COM + yeni abonelik Sihirbazı'nda, ileri ' yi tıklatın. IEvSink arabirimi abone ol</a0> seçeneğini belirleyin. Ileri ' yi tıklatın.
  26. Olay sınıfı Seç sayfasında, ClassLibLCE.MyPublisher ' ı tıklatın. ([EventClass] özniteliği ile donatılmış sınıf budur.) Ileri ' yi tıklatın.
  27. Bu aboneliği hemen etkinleştir onay kutusunu seçmek için tıklatın ve istediğiniz adı girin. Ileri ' yi tıklatın. Son ' u tıklatın.

Class1.cs dosya kodu

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 dosya kodu

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 dosya kodu

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();
		}
	}
}
				

Bu Works doğrulayın

  1. Kod Düzenleyicisi penceresinde, bölüm # 1 Form1.cs dosyasının kod açıklama ve kod bölüm # 2 uncomment.
  2. Yalnızca HowToLCE proje için yürütülebilir dosyayı çalıştırın. Bunu yapmak için <a0></a0>, Yapı) menüsünde Configuration Manager ' ı tıklatın. Oluştur onay kutusunu ClassLibLCE için temizleyin. Kapat ' ı tıklatın.
  3. Uygulama hata ayıklama modunda çalıştırmak için F5 tuşuna basın.
  4. Form yeniden yüklendiğinde, kapatın.
  5. Server Explorer'ı başlatmak için CTRL + ALT + S tuşlarına basın. Sunucuları ' nı genişletin. computer name genişletin. Olay günlükleri ' ni genişletin. Uygulama</a1> öğesini genişletin. ClassLibLCE genişletin.

    Iki olay günlük girdilerini dikkat edin.

SORUN GİDERME

  1. Server Gezgini'nde girişlerini görmek için olay günlüğünü yenileme.
  2. Sınıf kitaplığı için sistemde yukarıda belirtilen yordamlar çalıştırdıktan sonra değişiklik ve sınıf kitaplığı'ı yeniden derleme Bileşen Hizmetleri tarafından kilitlenir çok olasıdır. Bu sorunu gidermek için <a0></a0>, aşağıdaki yöntemlerden birini kullanın:
    • Bileşen Hizmetleri'nde bileşeni sağ tıklatın ve sonra Kapat ' ı tıklatın.

      -VEYA-
    • Kodunuzu önemli değişiklikler yapmak isterseniz, bileşen silin.



Referanslar

Gevşek eşleşmiş olaylar hakkında ek bilgi için aşağıdaki Microsoft Web sitesini ziyaret edin:
Using Loosely Coupled Events
Yapılandırılmış sınıfları ve COM + dağıtma hakkında ek bilgi için aşağıdaki Microsoft Web sitesini ziyaret edin:

Özellikler

Makale numarası: 318185 - Last Review: 24 Şubat 2014 Pazartesi - Gözden geçirme: 3.3
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft .NET Framework Class Libraries 1.0
Anahtar Kelimeler: 
kbnosurvey kbarchive kbmt kbhowtomaster KB318185 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:318185

Geri Bildirim Ver

 

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