複数回呼び出す目的は、 に基づいてSqlDependency.Start
の新しいインスタンスを作成するなど、他のアクションの前に問題がないことを確認することです。ここhttps://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldependency.start (v=vs.110).aspx(備考セクション)に関するMicrosoftのドキュメントによると、呼び出しのように見えます複数回はまったく問題ありません:SqlCacheDependency
Command
SqlDependency.Start
SqlDependency.Start
同一のパラメーター (呼び出しスレッドで同じ接続文字列と Windows 資格情報) を使用した複数の呼び出しは有効です。
しかし、実際には 2 回目の呼び出しで失敗する可能性があり (実際には成功したことはありません)、次の呼び出しのすべての試行がSqlDependency.Start
失敗します ( を返すことfalse
で、例外はスローされません)。
私がしたことは、最初の制限 (上記のリンクの「備考」セクションに記載) を満たす必要がありました。つまり、すべての呼び出しでSqlDependency.Start
同じパラメーターを使用する必要があります (実際には、接続文字列である同じパラメーターが 1 つだけありました)。次のようになります。
//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 ...
}
そのため、Microsoft が何を述べているか (備考セクションの最初の制限) を理解するのは非常に困難です。2 つの呼び出しはまったく同じです。しかし、2 番目の呼び出しが失敗すると、その後に使用された同じ呼び出しは失敗します (つまり、複数回呼び出しを試みた場合、正常に開始する機会はありません)。
Sql Server のログを見ると、「リモート サービスが見つかりません ... 存在しないため」のようなメッセージがたくさんあることがわかります。
この問題の解決策や回避策は必要ありません。Microsoft が述べたように期待どおりに動作しない理由について説明が必要なだけですか、または Microsoft が述べたことを誤解していますか?