我在作为服务运行的程序中使用 Windows EvtSubscribe API,通常在 Windows Server 2008 R2 域控制器上。它注册了 kerberos 登录事件,其目的是为我在网络上的应用程序提供单点登录。
我从登录事件中获取用户名/IP 并使用它们来预验证 IP 地址。这在大量站点中运行良好,直到最近在一个非常大的站点上使用(全天有 60,000 名用户登录和注销)。据我从进程监视器中得知,域控制器的负载并不高,但事件并没有立即传递给我的应用程序,它们可能会延迟 20 分钟到一个小时。
我使用 API 中描述的 PUSH 方法。代码是相同的。
在事件查看器中,查看安全日志,当用户登录到域时,登录事件会立即出现。但是,直到很久很久以后,该事件才被推送到我的应用程序中。
我从未在安装了我的应用程序的任何其他站点上看到过这种情况,我想知道这是否是服务器本身的配置问题。有延迟的站点总共有 4 个集群域控制器,我的应用程序在每个域控制器上运行和报告。所有 4 人在接收事件时都会定期经历长时间的延迟。
有没有其他人遇到过类似的事情或有任何想法可以发挥作用?
我尝试使用 VM 和 ADTest 复制它以生成负载,但运气不佳。