次の方法で共有


IEventProvider Interface

連続するホストされたイベント プロバイダを開発するためのフレームワークです。イベント プロバイダはイベントを収集し、Notification Services アプリケーションに送信します。このアプリケーションでイベントとサブスクリプション情報が照合され、通知が生成されます。

名前空間: Microsoft.SqlServer.NotificationServices
アセンブリ: Microsoft.SqlServer.NotificationServices (microsoft.sqlserver.notificationservices.dll 内)

構文

'宣言
Public Interface IEventProvider
public interface IEventProvider
public interface class IEventProvider
public interface IEventProvider
public interface IEventProvider

解説

ホストされるイベント プロバイダは、Notification Services エンジンによってホストされます。連続するホストされたイベント プロバイダは、終了されるまで動作します。エンジンは、必要に応じて、Initialize, Run メソッドと Terminate メソッドを呼び出します。

このインターフェイスは、ホストされたイベント プロバイダを開発するためのフレームワークです。連続するカスタム イベント プロバイダを開発する場合、このインターフェイスを Notification Services エンジンによって制御されるように実装する必要があります。

IEventProvider インターフェイスには、次のメソッドが用意されています。

  • Initialize は、プロバイダ ホストが、実行前に、イベント プロバイダに自身を初期化するように通知します。

  • Run は、プロバイダ ホストが、イベントの収集の開始をイベント プロバイダに指示します。

  • Terminate は、プロバイダ ホストが、イベントの収集を停止し、保持しているリソースを解放するようにイベント プロバイダに指示します。

プロバイダ ホストは、Notification Services エンジンの開始時に Initialize を呼び出します。このメソッドは、実行準備ができるように、必要なパラメータをイベント プロバイダに渡します。

プロバイダ ホストは、Initialize の呼び出しが正常に終了した後に、Run を呼び出します。Run の呼び出しは、イベントの収集および送信を開始するようにイベント プロバイダに指示します。

プロバイダ ホストは、Terminate メソッドを呼び出して、イベントの収集を停止します。プロバイダ ホストは、イベント プロバイダが応答しない場合 (たとえば、プロバイダ ホストが Run または Initialize の呼び出しを、指定されたタイムアウト時間内に完了しなかった場合)、またはイベント プロバイダが停止を要求した場合に、この呼び出しを実行します。

カスタム イベント プロバイダの詳細については、「カスタム イベント プロバイダの開発」を参照してください。

使用例

連続するホストされたイベント プロバイダを開始するには、次のインターフェイス宣言を使用します。

public interface IEventProvider
{
    void Initialize(
            NSApplication nsApplication,
            String providerName,
            StringDictionary args,
            StopHandler stopDelegate);
    Boolean Run();
    void Terminate();
}

テキスト ファイルのディレクトリを監視する、連続するイベント プロバイダの作成例を次に示します。このイベント プロバイダは、新しいファイルを検出すると、イベント データを解析して、Notification Services のインスタンスに送信します。次に、テキスト ファイルの名前を変更し、それをアーカイブ先のディレクトリに移動します。

using System;
using System.IO;
using System.Text;
using Microsoft.SqlServer.NotificationServices;
using System.Collections.Specialized;

namespace Adventureworks.Notifications.EventProviders
{  
    // This event provider picks up text files from a legacy
    // system, parses them, and submits the data as events to
    // the Notification Services system. These files provide 
    // information about customers whose order levels have 
    // dropped significantly. 
    public class OrderVarianceProvider : IEventProvider
    {
        NSApplication orderApplication = null;
        string eventDirectory = null;
        string eventClassName= null;
        string eventProviderName= null;
        FileSystemWatcher textWatcher= null;


        public OrderVarianceProvider()
        {
            // Add constructor logic here if required.
        }

        // Implement the IEventProvider.Initialize method.
        // appstate     = NSApplication that hosts the event provider.
        // providerName = Event provider name from application definition.
        // args         = StringDictionary object for name/value pairs 
        //                used for initialization arguments.
        // stopDelegate = StopHandler delegate that enables the 
        //                event provider to terminate itself.
        public void Initialize(NSApplication appState,
            string providerName,
            StringDictionary args,
            StopHandler stopDelegate)
        {
            this.orderApplication = appState;
            this.eventProviderName = providerName;
        
            // This event provider requires 2 arguments.
            // eventClass     = Event class name for which this event
            //                  provider submits events.
            // eventDirectory = Full path to the location where the 
            //                  event provider picks up event files.
            if (2 == args.Count)
            {
                this.eventClassName = args["eventClass"];
                this.eventDirectory = args["eventDirectory"];
            }
            else
            {
                throw new ArgumentException(
                    "Inadequate number of arguments supplied.");
            }

            // If necessary, validate argument values.
        }

        //Implement the IEventProvider.Run method.
        public Boolean Run()
        {           
            bool returnValue = true; 
    
            // Process any existing event files.
            DirectoryInfo eventDirectoryInfo = 
                new DirectoryInfo(eventDirectory);

            foreach (FileInfo eventFile 
                in eventDirectoryInfo.GetFiles("*.txt")) 
            {
                ProcessEventFile(eventFile.FullName);
            }

            // Create a FileSystemWatcher 
            // to watch for new event files.
            textWatcher = new FileSystemWatcher();
            textWatcher.Path = eventDirectory;
            textWatcher.NotifyFilter = NotifyFilters.FileName;
            textWatcher.Filter = "*.txt";

            // Add an event handler.
            textWatcher.Created 
                += new FileSystemEventHandler(OnCreated);

            // Begin watching for files.
            textWatcher.EnableRaisingEvents = true;

            return returnValue;
        }
        // The OnCreated event handler calls 
        // ProcessEventFile when a new event file 
        // appears in the watched directory.
        private void OnCreated(object source, 
            FileSystemEventArgs e)
        {
            ProcessEventFile(e.FullPath);
        }

        // This method is called initially in Run()
        // and then each time a text file is placed
        // in the watched directory. It parses the
        // text file and submits the data as events.
        private void ProcessEventFile(string fileName)
        {
            // Create the Event object.
            Event orderEvent = 
                new Event(orderApplication, eventClassName);

            // Create the EventCollector object.
            EventCollector orderEventCollector = 
                new EventCollector(orderApplication, eventProviderName);

            try
            {

                // Read event data out of the text file.
                StreamReader fileReader = new StreamReader(fileName);
                string textEvent;
                while ((textEvent = fileReader.ReadLine()) != null)
                {
                    string[] eventFields = textEvent.Split('|');
                    for (int i = 0; i < eventFields.Length; i++) 
                    {
                        // Set the event field in the MyEvent object.
                        orderEvent[i] = eventFields[i];
                    }

                    // Write the event to the EventCollector.
                    orderEventCollector.Write(orderEvent);
                }

                // Submit the event batch to the
                // Notification Services application database.
                int eventsSubmitted = orderEventCollector.Commit();
                orderEvent = null;
                

                // Close the StreamReader.
                fileReader.Close();

                // Move and rename the file once it processed.
                FileInfo renameFile = new FileInfo(fileName);
                StringBuilder builder = new StringBuilder(
                    @"C:\complete\events");
                builder.Append(DateTime.Now.Day);
                builder.Append(DateTime.Now.Month);
                builder.Append(DateTime.Now.Year);
                builder.Append(DateTime.Now.Hour);
                builder.Append(DateTime.Now.Minute);
                builder.Append(DateTime.Now.Second);
                builder.Append(".done");
                string newName = builder.ToString(); 
                renameFile.MoveTo(newName);

            }
            catch (Exception ex)
            {
                orderEventCollector.Abort();
                // Provide additional error 
                // handling here if needed.
            }
        }

        // Implement the IEventProvider.Terminate method.
        public void Terminate()
        {
            // Remove the event handler.
            if (null != textWatcher)
            {
                textWatcher.Created -= 
                    new FileSystemEventHandler(OnCreated);
            }
        }
    }
}

プラットフォーム

開発プラットフォーム

サポートされているプラットフォームの一覧については、「SQL Server 2005 のインストールに必要なハードウェアおよびソフトウェア」を参照してください。

対象プラットフォーム

サポートされているプラットフォームの一覧については、「SQL Server 2005 のインストールに必要なハードウェアおよびソフトウェア」を参照してください。

参照

関連項目

IEventProvider Members
Microsoft.SqlServer.NotificationServices Namespace