2011-11-11 3 views
4

나는 단순한 일을하려하지만, 그 답을 찾을 수 없습니다. (웹 사이트의) 응용 프로그램 수준에서 캐시를 삭제하는 방법을 알고 있습니다.WebRole에서 전체 Windows Azure Appfabric 캐시를 지우는 방법은 무엇입니까?

하지만 webrole start에서 내 azure appfabric 캐시의 모든 캐시를 삭제해야합니다.

편집 : 할 수 있다면 어떻게해야합니까? Azure Asp.net 공유 캐싱의 심각한 오작동을 고려하거나 나는 바보입니까?

이이 시나리오이 난에 붙어있어 :

  • 나는
  • 내 모든 웹 사이트가 60 분 각 루트에의 default.aspx 파일이 고려 몇 가지 다른 웹 사이트가 AA WebRole이 캐싱이 일반 정규 <% @의 OutputCache를 기간 =입니다 "3600"VaryByParam 특성 = "*"%>,
  • 내가 그들을 찾아, 결과적으로 여러 캐시 된 페이지가 60 분 동안 appfabric 캐시에 저장되어 더 멋진 코드는
  • 는 Uner에 고려하지 후 d와 같은 경로에 캐시가 만들어집니다.
  • 사이에 웹을 재설정하거나 새 배포본을 업로드하십시오.
  • 이제 새로 만든 인스턴스에 내 웹 사이트에 다음 경로가 있다고 가정합니다. 'F : \ sitesroot \ XX'
  • 당신은 내가 가지고 heres는 결과를 얻을 :

디렉토리를 'E : \ sitesroot 12 \'이 존재하지 않습니다. 파일 변경 모니터링을 시작하지 못했습니다.

System.Web.HttpException (0x80070003): Directory 'E:\sitesroot\12' does not exist. Failed to start monitoring file changes. 
at System.Web.FileChangesMonitor.FindDirectoryMonitor(String dir, Boolean addIfNotFound, Boolean throwOnError) 
at System.Web.FileChangesMonitor.StartMonitoringPath(String alias, FileChangeEventHandler callback, FileAttributesData& fad) 
at System.Web.Caching.CacheDependency.Init(Boolean isPublic, String[] filenamesArg, String[] cachekeysArg, CacheDependency dependency, DateTime utcStart) 
at System.Web.Caching.CacheDependency..ctor(Int32 dummy, String[] filenames) 
at System.Web.Caching.OutputCache.HasDependencyChanged(Boolean isFragment, String depKey, String[] fileDeps, String kernelKey, String oceKey, String providerName) 
at System.Web.Caching.OutputCache.Get(String key) 
at System.Web.Caching.OutputCacheModule.OnEnter(Object source, EventArgs eventArgs) 
at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

은 현재 appfacbric 캐시가 하드 경로로 cachedepency에 의존하기 때문에이 문제가 될 수 있음을 이해하는 데 좀 시간이 걸렸다 "E : \ sitesroot \". 이 경로가 변경되면 어떻게됩니까?

그럼 어떻게해야합니까? 여기서 잃어 버렸고 Global.asax Application_Start에서 appcache를 지우려고했으나 작동하지 않는 것입니다. 왜 그런지 이해하지 못합니다.

여기에서 Global.asax 위해 Application_Start

Public Shared Sub cacheClear() 

    Dim keys As New List(Of String)() 
    ' retrieve application Cache enumerator 
    Dim enumerator As IDictionaryEnumerator = HttpRuntime.Cache.GetEnumerator() 
    ' copy all keys that currently exist in Cache 
    While enumerator.MoveNext() 
     keys.Add(enumerator.Key.ToString()) 
    End While 
    ' delete every key from cache 
    For i As Integer = 0 To keys.Count - 1 
     HttpRuntime.Cache.Remove(keys(i)) 
    Next 

End Sub 

이 트릭을 할해야합니다, 그것은 것 같습니다하지 않는 각 웹 사이트에 캐시를 지우려면 내 코드입니다.

확실히 말도 안되는 점이 있습니다.

편집 내가 appfabric을 위해 완전히 asp.net OutputCache를 제공을 삭제하고 appfabric와 사용자 정의 캐시를 작성 종료

. 위대한 작품, 푸른 라인에 코드와 cachedependancy의 몇 줄 쉽게했다.

답변

1

나는 100 % 확신 할 수는 없지만 이것을 수행 할 수 있다고 생각하지 않습니다.

+0

안녕하세요, Azure의 심각한 mislogic을 "플러그 앤 플레이"Asp.net 용 캐싱 시스템에서 발견했다고 생각합니다. 내 게시물을 업데이트 할 것입니다. – kdstack