ホーム > コンピュータ > DataBase > PostgresSQL > Npgsql

通知とその動作[Npgsqlドキュメント]

作成日 2015.03.06
最終更新日 2015.03.06

概要

PostgreSQLデータベース・サーバのための、.NET データ・プロバイダNpgsqlのドキュメント(2014年7月25日・13改訂版)の和訳です。 旧版ドキュメント(外部サイト) の和訳は存在しましたが、現行版のドキュメントのものは見つからなかったので和訳しました。 PostgreSQLとC#の両方を学ぶための資料集めの一環としての作成しています。

原文

npgsqlマニュアル(2014年7月25日・13改訂版)(外部サイト)

公式ページのドキュメントです。英語で書かれています。

通知とその動作

Working with Notifications

Npgsqlは、ユーザーが、サーバから送信される通知に基づいて、イベントを受け取ることができます。 2つの方法が、Npgsqlでnoticationsを受け取るためにあります:非同期、あるいは、同期して。 同期通知は、Npgsql 1.0とそれ以降のみでサポートされています。

非同期通知

Asynchronous Notifications

これは、Npgsqlで使用される既定の通知の仕組みです。それは、非同期で呼び出されます。 なぜなら、Npgsqlは、イベントの実行時に、そのサーバで作成された通知を受け取りません。 Npgsqlは、サーバとクライアントの対話処理の、次のインスタンスで通知を受け取ります。 この対話処理は、実際に発生します。Npgsqlが、後に続くコマンドをサーバに送るとき、-それは、数秒から、数時間までで構成されるでしょう。 これを考慮して、ほとんどのユーザーは、適時、問題の通知受け取るために、積極的にサーバの意見を尋ねる必要があるでしょう。 一つの方法は、「;」のような、空のコマンドによって意見を尋ねることが必要です

同期通知

Synchronous Notifications

Npgsql1.0以降では、同期通知のためのサポートが存在します。 このモードで動作するとき、Npgsqlは、そのインスタンス生成とクライアントにそれを提供するために、通知を受け取ることができます。 これはすべて、クライアントとサーバの間で、どんな追加の対話処理もなしで行われます。(先に説明したように)。

重要なお知らせ:

同期通知を使用すると、あなたは、通知ハンドラ関数内でコマンドを実行することができません。 あなたが、それを行うと、あなたは、スレッドとしてNpgsqlを掛けるでしょう。それは、通知が同じものであるとして処理します。 それは、Npgsqlとバックエンドとの通信を処理します。 あなたが、どんなコマンドでも使用したい場合、どうぞ、他のコネクションを作成して、代わりにそれを使用してください。 これは、最も良い解決法でありません。しかし、私たちは、他の接続を必要としないで行うために、より優れた方法を学んでいます。

通知を受け取るためのコードは、両方のモードで同じものです。:


using System;
using System.Data;
using Npgsql;
using NpgsqlTypes;
using System.Threading;

public class c
{
    public static void Main(String[] args)
    {
        var conn = new NpgsqlConnection("Server=127.0.0.1;User id=npgsql_tests;password=npgsql_tests;");
        conn.Open();

        NpgsqlCommand command = new NpgsqlCommand("listen notifytest;", conn);
        command.ExecuteNonQuery();

        conn.Notification += new NotificationEventHandler(NotificationSupportHelper);

        command = new NpgsqlCommand("notify notifytest;", _conn);
        command.ExecuteNonQuery();

        Console.ReadLine();  // To prevent program termination before notification is handled. 
    }      // プログラム終了を防止するために、事前に、通知を処理します。

    private void NotificationSupportHelper(Object sender, NpgsqlNotificationEventArgs args)
    {
        // process notification here. 
        // ここに、通知処理があります。
    }
}
			

このコードは、通知を聞き取り、通知を発生させるために登録します。 それは、NotificationSupportHelperメソッドに提供されるでしょう。

inserted by FC2 system