多次调用的目的SqlDependency.Start
是确保在其他一些操作(例如SqlCacheDependency
基于Command
. 根据微软SqlDependency.Start
在此处的文档https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldependency.start(v=vs.110).aspx(备注部分),看起来像调用SqlDependency.Start
多次完全没问题:
具有相同参数的多个调用(调用线程中的相同连接字符串和 Windows 凭据)是有效的。
但实际上,第二次调用它可能会失败(实际上它对我来说从未成功过),使所有下一次调用SqlDependency.Start
失败的尝试(通过返回静默false
,不抛出异常)。
我所做的应该满足第一个限制(在上面链接的备注部分中提到),即所有调用SqlDependency.Start
都具有相同的参数(实际上只有一个相同的参数是连接字符串)。它看起来像这样:
//at initialization step (such as in `Application_Start()` in ASP.NET MVC)
SqlDependency.Start(myConnectionString);//this usually returns OK
//later at the time before creating an instance of SqlCacheDependency
//I tried to call the Start method again to ensure everything is ok
var ok = SqlDependency.Start(myConnectionString);//almost always false
if(ok){
//almost never reach here ...
}
所以很难理解微软所说的(在备注部分的第一个限制中),这两个调用完全相同。但是由于第二次调用失败,之后使用的任何相同调用仍然会失败(这意味着一旦我尝试多次调用它,就没有机会成功启动它)。
当我在 Sql Server 中看到日志时,我可以看到有很多消息说找不到远程服务......因为它不存在
我不需要解决方案或解决此问题,我只需要解释为什么它不像微软所说的那样正常工作,或者我误解了微软所说的?