VirtualPathProvider
SQL Server テーブルから仮想ページを返すために使用しています。これは pk で動作しており、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
End Class