初めてSQL依存関係を使用しています...しかし、いくつかの例を上った後、私はすべて正しいことをしているように感じます。私はブローカーが有効であることを確認しました。私はさらに私のクエリが正しいことを確認しました。私は全く例外を受けていません!すべてとすべてがすべて動作するはずですが、そうではありません。例外を投げずにトラブルシューティングを始める方法がわかりません。SQL依存関係イベントがトリガーされていません
ご迷惑をおかけして申し訳ございません。
public class NotificationEvent
{
private delegate void RateChangeNotification(DataTable table);
private SqlDependency dependency;
string ConnectionString = @"ConnectionString";
string UserName = Environment.UserName;
public async void StartNotification()
{
SqlDependency.Start(this.ConnectionString, "UserNotificationsQueue");
SqlConnection connection = new SqlConnection(this.ConnectionString);
await connection.OpenAsync();
SqlCommand command = new SqlCommand();
command.Connection = connection;
command.CommandType = CommandType.Text;
command.CommandText = string.Format("SELECT [NotificationID],[UserFrom],[UserTo],[DateTimeSent],[Notification] FROM [dbo].[PersonnellNotifications]", UserName);
command.Notification = null;
this.dependency = new SqlDependency(command, "Service=PostUserNotificationsQueue;", Int32.MaxValue);
dependency.OnChange += new OnChangeEventHandler(this.SqlDependencyOnChange);
await command.ExecuteReaderAsync();
}
private void SqlDependencyOnChange(object sender, SqlNotificationEventArgs eventArgs)
{
if (eventArgs.Info == SqlNotificationInfo.Invalid)
{
Console.WriteLine("The above notification query is not valid.");
}
else
{
Console.WriteLine("Notification Info: " + eventArgs.Info);
Console.WriteLine("Notification source: " + eventArgs.Source);
Console.WriteLine("Notification type: " + eventArgs.Type);
}
}
public void StopNotification()
{
SqlDependency.Stop(this.ConnectionString, "QueueName");
}
}
私が見られるように、別のクラスIniatializeComponent()からこれを初期化しています:私はちょうど私のコードとその作業良いで次のテストしている
private void InitializeComponent()
{
// Initialize SQL Dependancy
ne.StartNotification();
}
SQLの依存関係を持つ私の知識がかなり限られているが、あなたは、あなたが実際にサーバ上でやっているものを見るためにSQLプロファイラを接続していた場合、私は思っていました。 – Amy
この初期設定は、Global.asax.Application_StartまたはStartup.csで行う必要があります。 – Programmer
@Programmerあなたは正しいです...私は実際に別の問題に続いて数分前にそれを切り替えました。しかし、スタートアップレベルでも同じ結果が得られました。 –