2

我用 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 服务作为网络服务运行。我也尝试过本地系统,但似乎都没有工作。有任何想法吗?

谢谢!

4

1 回答 1

1

该服务需要 Windows 防火墙中的异常。添加异常后,它完美无缺。

于 2012-09-26T22:45:24.753 回答