Я использую VirtualPathProvider
для возврата виртуальных страниц из таблицы SQL Server. Это рабочий пакет, и код в моем VirtualPathProvider
файле класса приведен ниже.
Проблема, с которой я столкнулся, заключается в том, что при внесении изменений в данные виртуальной страницы (заголовок или текст страницы), хранящиеся в базе данных, это изменение не отображается на странице, которая выводится, поскольку исходная страница была кэширована.
Я прочитал несколько статей о добавлении GetCacheDependancy в класс VirtualPathProvider и попытался реализовать несколько примеров, но исходная страница все еще кэшируется и отображается.
Я также попытался добавить некоторый код к загрузке страниц виртуальных страниц (Response.AddCacheItemDependency("Pages")
) и отредактировать global.asax:
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs on application startup
HttpContext.Current.Cache.Insert("Pages", DateTime.Now, Nothing, _
System.DateTime.MaxValue, System.TimeSpan.Zero, _
System.Web.Caching.CacheItemPriority.NotRemovable, _
Nothing)
для предотвращения кеширования. но ничего не работает.
Итак, я хочу внести некоторые изменения в файл класса VirtualPathProvider для предотвращения этих проблем с кэшированием. Спасибо за любую помощь, которую вы можете предложить!
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
Imports System.Web
Imports System.Web.Security
Imports System.Web.UI
Imports System.Web.UI.HtmlControls
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports System.Web.Hosting
Imports System.Web.UI.MobileControls
Imports System.Collections.Generic
Public Class DbVirtualPathProvider
Inherits VirtualPathProvider
Public Shared Sub AppInitialize()
Dim db As New DbVirtualPathProvider()
HostingEnvironment.RegisterVirtualPathProvider(db)
End Sub
Public Overrides Function FileExists(ByVal virtualPath As String) As Boolean
Dim strConn As String = ConfigurationManager.ConnectionStrings("LIQUIDConnectionString").ConnectionString
Dim cnn As New SqlConnection(strConn)
cnn.Open()
Dim cmd As New SqlCommand()
cmd.Connection = cnn
cmd.CommandText = "select count(*) from tbl_VirtualFiles where virtualpath='" & virtualPath & "'"
Dim retval As Object = cmd.ExecuteScalar()
cnn.Close()
Dim i As Integer = Convert.ToInt32(retval)
If i <= 0 Then
'important as if no virtual file it looks for physical file
Return Previous.FileExists(virtualPath)
Else
Return True
End If
End Function
Public Overrides Function GetFile(ByVal virtualPath As String) As VirtualFile
Dim file As New DbVirtualFile(virtualPath)
If file.WebFormContent Is Nothing Then
Return Previous.GetFile(virtualPath)
Else
Return file
End If
End Function
Конечный класс