[HOW TO 使用疎結合イベント Visual Studio .NET から

文書翻訳 文書翻訳
文書番号: 318185 - 対象製品
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
すべて展開する | すべて折りたたむ

目次

概要

このステップ バイ ステップ ガイドを使用して、パブリッシャー、サブスクライバー、および Microsoft COM + サービスの疎結合イベントを処理するためのインターフェイスを含む、.NET アセンブリを作成します。

要件

次のとおりの推奨されるハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、および必要なサービス パックです。
  • Microsoft Windows 2000 Professional、Microsoft Windows 2000 Server、Microsoft Windows XP Professional または Windows XP Server。
  • Microsoft .NET フレームワークです。
  • Microsoft Visual Studio .NET。
  • Microsoft Visual C# .NET。
  • Microsoft COM + です。
この資料は、次のトピックについて詳しい知識のあるユーザーを対象としています:
  • COM およびエンタープライズ サービス。
  • 属性を使用してメタ データを拡張します。

使用して疎結合イベント、.NET アセンブリを作成します。

次の手順、パブリッシャー、サブスクライバー、およびハンドルを COM + サービスでイベントを疎結合のインターフェイスを含む .NET アセンブリが作成されます。
  1. 開始 ] をクリックして、 プログラム をポイントし、 Microsoft Visual Studio .NET でをポイントし、 Microsoft Visual Studio .NET をクリックします。
  2. [ 新しいプロジェクト ] をクリックします。
  3. [ プロジェクトの種類 ] タブの Visual C# プロジェクト を [します。
  4. [ テンプレート ] の [ Windows アプリケーション にします。
  5. [ 名前 ] ボックスで HowToLCE 、入力を [OK] をクリックします。

    Windows フォーム アプリケーションのシェルを含むソリューションがあるようになりました。
  6. パブリッシャー、サブスクライバー、およびインターフェイスの両方によって共有されるコードを含むクラス ライブラリを作成します。 [ ファイル ] メニューの [ プロジェクトの追加 をポイントし、[ 新しいプロジェクト ] をクリックします。
  7. [ プロジェクトの種類 ] タブの Visual C# プロジェクト を [します。
  8. テンプレート ]、[ クラス ライブラリ ] をクリックします。
  9. [ 名前 ] ボックスで ClassLibLCE 、入力を [OK] をクリックします。
  10. ClassLibLCE 、[ソリューション エクスプローラーで 参照設定 ] を右クリックし、[ 参照の追加 ] をクリックします。
  11. [ .NET ] タブの [ 参照設定 ] で [ System.EnterpriseServices ] をクリックし、 選択 します。 [ OK] をクリックします。
  12. これらの名前空間内のアクセス クラスを Class1.cs ファイルの最上部に、次 を使用して ディレクティブを追加:
    using System.EnterpriseServices;
    using System.Diagnostics;
    						
    、.NET アセンブリ、 クラス ライブラリ のコンポーネントをコンパイルするときになります。 それを登録した後に実行できます [COM + サービス、パブリッシャーとサブスクライバーの EnterpriseServices.ServicedComponents() から派生するため。
  13. これら 2 つのクラスを共有するインターフェイスを宣言します。 パブリック クラス クラス 1 の後に次のコード、Class1.cs ファイルで追加:
    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] 属性で装飾を通知します。 この属性は重要です。 メッセージ COM + サービスこのクラスで、パブリッシャーとその subscriber(s) 間の接続を形成することです。 ここでのすべてのコードによって作業を行った、ときにことことを確認しない MyPublisher クラスへの直接の呼び出し。 言い換えると、パブリッシャーとサブスクライバー間の相互作用は、[EventClass] 属性でクラスでは [によって COM + サービス処理されます。 そのため、パブリッシャーには、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 コマンド プロンプトから実行します。 [スタート ] をクリックして、 プログラム Microsoft 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 フォーム上でのソリューション全体のコードを完成します。 このフォームはデモンストレーション用だけにある忘れないでください。 基本的にテスト ハーネスとして機能します。 適切な参照を追加します。
    1. HowToLCE 、[ソリューション エクスプローラーで [参照設定 ] を右クリックし、ショートカット メニューの [ 参照の追加 ] をクリックします。
    2. [ .NET ] タブの [ System.EnterpriseServices を] をクリックします。
    3. [ プロジェクト ] タブの [ ClassLibLCE を] をクリックします。
    4. 選択] をクリックします。
    5. [ OK] をクリックします。

      [ 参照設定 ] に表示される System.EnterpriseServices および ClassLibLCE 項目を確認します。
  20. コード エディターで、[ Form1.cs [デザイン] タブ ダブルクリック Form1_Load イベント ハンドラーを作成するフォームの任意の場所にクリックします。 このイベント ハンドラーするには次のコードは、追加します。

    されている 2 つのセクションがあることがわかります。 1 つだけの目的で、クラス ライブラリの登録です。 1 回だけ使用されます。 2 番目の発行元イベントをトリガーします
    // 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 インターフェイスへの購読 を選択します。 [ 次へ </a0>] をクリックします。
  26. イベント クラスの選択 ] ページで、[ ClassLibLCE.MyPublisher を] をクリックします。 これは、[EventClass] 属性で装飾されているクラスです。 [ 次へ </a0>] をクリックします。
  27. 名前を使用してクリックして、 このサブスクリプションをすぐに有効にする ] チェック ボックスを選択する入力します。 [ 次へ </a0>] をクリックします。 [完了] をクリックします。

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. コード エディター、ウィンドウで Form1.cs ファイルのセクション番号 1 でのコードをコメントし、コード セクション # 2 にコメントを解除します。
  2. HowToLCE プロジェクトの実行可能のみ実行します。 これを行うには、 ビルド にメニュー 構成マネージャー ] をクリックします。 [ ビルド </a0>] チェック ボックス オフに ClassLibLCE します。 閉じる をクリックします。
  3. F5 キーを押して、アプリケーションをデバッグ モードで実行します。
  4. フォームが読み込まれる場合を閉じます。
  5. Ctrl キーを押しながら Alt キーを押しながら S サーバー エクスプローラーを起動するキーを押してください。 [ サーバー ] を展開します。 [computer name] を展開します。 イベント ログ を展開します。 アプリケーション を展開します。 [ ClassLibLCE を] を展開します。

    2 つのイベント ログ エントリを確認します。

トラブルシューティング

  1. サーバー エクスプローラー内のエントリを表示するには、イベント ログを更新します。
  2. 前述の手順を実行した後、クラス ライブラリを変更してから、クラス ライブラリを再構築場合コンポーネント サービスで、アセンブリがロックされることは非常におそらくは。 この問題を回避するには、いずれかの次の方法の使用します。
    • [ コンポーネント サービス コンポーネントを右クリックし、[ シャットダウン ] をクリックします。

      - または -
    • コードに大幅な変更を加える場合コンポーネントを削除します。



関連情報

疎結合イベントの詳細については、次のマイクロソフト Web サイトを参照してください。
Using Loosely Coupled Events
詳細を実装して COM + を展開する方法については、次のマイクロソフト Web サイトを構成されたクラスは、参照してください。

プロパティ

文書番号: 318185 - 最終更新日: 2014年2月24日 - リビジョン: 3.3
この資料は以下の製品について記述したものです。
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft .NET Framework クラス ライブラリ 1.0
キーワード:?
kbnosurvey kbarchive kbhowtomaster kbmt KB318185 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:318185
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

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