我用 C# 编写了一个控制台应用程序,它使用 ODP.NET 来监听来自 Oracle 数据库的数据库更改通知。控制台应用程序完美运行。我用相同的代码编写了一个 Windows 服务,但在 Windows 服务OracleDependency.OnChange
中永远不会触发。
这是我用来注册数据库更改通知的代码:
string sql = GenerateQuery();
using (OracleConnection conn = new OracleConnection(connectionString))
using (OracleCommand cmd = new OracleCommand(sql, conn))
{
conn.Open();
// Register a listener for the database change notification event
OracleDependency dep = new OracleDependency(cmd);
dep.OnChange += (sender, args) =>
{
// Do stuff..
};
cmd.ExecuteNonQuery();
}
我可以通过查询表在数据库中看到通知user_change_notification_regs
,但客户端从未收到回调。同样,在控制台应用程序版本中(使用相同的代码),客户端完美地接收到回调。
Windows 服务作为网络服务运行。我也尝试过本地系统,但似乎都没有工作。有任何想法吗?
谢谢!