मुझे एक तालिका के लिए SqlCacheDependency लागू करने की आवश्यकता है जो इस क्वेरी पर निर्भर करेगा: SELECT Nickname FROM dbo.[User]
।SqlCacheDependency का उपयोग कैसे करें?
मैं इस उद्देश्य के लिए एक विधि बनाया है:
private IEnumerable<string> GetNicknamesFromCache()
{
const String cacheValueName = "Nicknames";
var result = HttpRuntime.Cache.Get(cacheValueName) as List<String>;
if (result == null)
{
result = _repository.GetAllNicknames();
var connectionString = ConfigurationManager.ConnectionStrings["RepositoryContext"].ConnectionString;
var sqlConnection = new SqlConnection(connectionString);
var sqlCommand = new SqlCommand("SELECT Nickname FROM dbo.[User]", sqlConnection);
var sqlDependency = new SqlCacheDependency(sqlCommand);
HttpRuntime.Cache.Insert(cacheValueName, result, sqlDependency);
}
return result;
}
लेकिन यह काम नहीं करता है जब मैं अपने आवेदन चलाते हैं। मैंने ग्राहकों की सूची (sys.dm_qn_subscriptions
तालिका) की जांच की और कोई रिकॉर्ड नहीं था।
मैं ज्यादा समय की जांच की और पहले से ही विभिन्न समाधान की कोशिश की है, लेकिन वे मेरे लिए काम नहीं करता:
उपयोग विश्वसनीय कनेक्शन और सार्वजनिक भूमिका के लिए कुछ अनुमति सेट:
GRANT CREATE PROCEDURE TO public
GRANT CREATE QUEUE TO public
GRANT CREATE SERVICE TO public
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO public
GRANT SELECT ON OBJECT::dbo.[User] TO public
GRANT RECEIVE ON QueryNotificationErrorsQueue TO public
उपयोग 'सा' कनेक्शन के लिए लॉगिन
- उपयोग aspnet_regsql.exe (
aspnet_regsql.exe -S localhost -E -ed -d TestTable -et -t User
) web.config में system.webServer के विन्यास जोड़ें:
<caching>
<sqlCacheDependency enabled="true">
<databases>
<add name="Tmpl" pollTime="5000" connectionStringName="RepositoryContext"/>
</databases>
</sqlCacheDependency>
</caching>
एसक्यूएल सर्वर (SQL सर्वर 2008 एक्सप्रेस, एसक्यूएल के विभिन्न उदाहरणों पर
रन Global.asax Application_Start घटना में SqlDependency.Start() डाल सर्वर 2008)
लेकिन इससे मदद नहीं मिली। यह अभी भी काम नहीं करता है।
मैं इसे कैसे काम करूं?
क्या आपने कनेक्शन को खोलना जरूरी है जैसा आपने यहां किया है या क्या आप इसे बंद/निपटान कर सकते हैं? –
उपरोक्त मेरे अपने प्रश्न का उत्तर देना - यह कनेक्शन खोलना जरूरी है ताकि सेवा दलाल उन सूचनाओं को भेज सके। जो आपके आस-पास डिज़ाइन करने में थोड़ा कठिन बनाता है यदि आपके पास कई कैश प्रविष्टियां हैं जिन्हें रीफ्रेश करने की आवश्यकता है। –