2011-05-06 3 views
21

ASP.NET 웹 페이지에 포함 된 XBL (XAML 브라우저 응용 프로그램)을 개발했습니다. 클라이언트 컴퓨터에서 업데이트 할 XBAP의 최신 버전을 가져 오는 데 문제가 있습니다. 개발 과정에서 Mage.exe 도구를 사용하여 로컬 컴퓨터에서 실행할 때 변경 사항을 볼 수 있도록 응용 프로그램 캐시를 지워야했습니다. 명령 줄에서 Mage.exe -cc을 실행하는 것 외에 rundll32 dfshim CleanOnlineAppCache도 마찬가지로 작동합니다.클라이언트 컴퓨터에서 XBAP를 최신 버전으로 업데이트하는 방법은 무엇입니까?

그러나 고객에게 명령 줄에서 명령을 실행하도록 요청하고 싶지는 않습니다. 클라이언트 컴퓨터에서 XBAP을 자동으로 업데이트하려면 어떻게해야합니까? 클라이언트 컴퓨터에서 업데이트 된 XBAP 새로 고침 대신 이전 버전의 XBAP가 계속 실행됩니다. 저도 같은 문제를 가지고 있기 때문에

업데이트

는이 질문에 현상금을 만들었습니다. 내가 온라인에서 읽은 것부터 XBAP은 캐싱 된 버전을 웹 서버에있는 버전 번호와 비교하고 새로운 버전을 다운로드합니다. 버전 번호가 다르다는 것을 확인했지만 캐시 된 사본은 여전히 ​​XBAP를 실행할 때 실행중인 사본입니다.

캐시 된 사본은 asp.net 페이지 외부에서 XBAP을 실행해도 발생하지만 URL 매개 변수를 변경하면 새 버전이 표시됩니다.

업데이트 # 2

나는 XBAP가 자동으로 내 Windows 7 64 비트 시스템에 XP 32 비트 시스템에서 업데이트,하지만하지 않는 것을 발견했습니다.

답변

3

나는 라이트 XAP을하지 XBAP에 그것을 사용하지만 당신은 이런 식으로 뭔가를 시도 할 수 너무 당신을 위해 일 수 있습니다

public partial class App : Application 
{ 
    /// <summary> 
    /// Creates a new <see cref="App"/> instance. 
    /// </summary> 
    public App() 
    { 
     Application.Current.CheckAndDownloadUpdateAsync(); 
     // rest of code 

편집

거 되었습니까

(미리보기는 다음) 게시 간 버전 번호를 늘리라고 제안했으나 이미 처리 된 것 같습니다. 이 문제는 모든 브라우저에서 발생합니까? 일부 IE 관련 버그/이상한 일이있을 수 있습니다 (IE를 많이 보아도 놀랍지는 않습니다.)

+1

해당 방법이 XBAP에 존재하지 않는 것 같습니다. – Rachel

+0

IE, FireFox 및 Chrome에서 테스트했는데 모두 새 버전을 다운로드하지 못했습니다. – Rachel

+1

[CheckAndDownloadUpdateAsync] (http://msdn.microsoft.com/en-us/library/system.windows.application.checkanddownupupdateasync (v = versus95) .aspx)는 Silverlight 전용 기능인 것으로 보이며 WPF/XBAP. WPF 용 –

0

브라우저가 xbap을 다운로드하지 못하도록하는 올바른 캐시 헤더가 없습니다.

캐시를 수정하여 해결되는지 확인하십시오.

는 선택적으로 사용

<%string versionInfo = typeof (AVSTX.POS.WebMvc.Controllers.HomeController).Assembly.GetName().Version.ToString(); %> 
<param name="source" value="<%=ResolveUrl("~/ClientBin/AVSTX.POS.WebRia.xap?version=" + versionInfo) %>"/> 

브라우저가이 시점에서 캐시 할 수있는 새로운 URL을 만들 수 있습니다. [: ("3.4.9.0") AssemblyVersion 조립] 그것은 너무 을 증가해야합니다 호스트 어셈블리 버전 검사를 기반으로 [조립 : AssemblyFileVersion를 ("3.4.9.0")]

이 솔루션은하지 않습니다 앞으로 다운로드 할 수있는 동적 모듈을 해결하십시오. 이것이 당신의 문제라면 실제 캐시 헤더를 수정해야합니다.

편집 1 : 당신은 당신의 응용 프로그램을 배포하는 ClickOnce를 사용할 수있는 코드는 브라우저 캐싱을

//http://stackoverflow.com/questions/1160105/asp-net-mvc-disable-browser-cache 
//http://developer.yahoo.com/performance/rules.html#expires 
//http://ray.jez.net/prevent-client-side-caching-with-httpmodules/ 
//http://stackoverflow.com/questions/2281919/expiry-silverlight-xap-file-from-browser-cache-programmatically 
public class XapFileHttpModule : IHttpModule 
{ 
    #region IHttpModule Members 

    public void Init(HttpApplication context) 
    { 
     context.BeginRequest += context_BeginRequest; 
    } 

    public void Dispose() 
    { 
    } 

    private void context_BeginRequest(Object source, EventArgs e) 
    { 
     HttpApplication application = (HttpApplication)source; 
     HttpContext context = application.Context; 

     if(context.Request.FilePath.Contains(".xap")) 
     { 
      context.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1)); 
      context.Response.Cache.SetValidUntilExpires(false); 
      context.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches); 
      context.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
      context.Response.Cache.SetNoStore(); 
     } 
    } 

    #endregion 
} 
+0

이 앱을 실행할 때마다 다시 다운로드하지 않습니까? 캐싱의 요점은 다시 다운로드하지 않기 때문에 시작 시간을 단축 할 수 있기 때문입니다. 새로운 릴리즈에서만 – Rachel

+0

이 다시 다운로드됩니다. 생성 된 URL은 호스트 웹 사이트 AssemblyVersion (링크 된 파일을 사용하는 앱과 동일하게 유지)을 기반으로합니다. 따라서 캐싱은 여전히 ​​작동합니다. 동적으로 새 어셈블리를 다운로드하는 경우에도 http://compositewpf.codeplex.com/discussions/240811?ProjectName=compositewpf –

+0

과 같은 캐싱 문제가있을 수 있습니다. 이것을 XBAP에서 구현하는 방법을 알고 계십니까? (또는 가능하다면?) 게시 한 코드와 링크가 모두 Silverlight에만있는 것처럼 보입니다. – Rachel

0

를 비활성화합니다. 사용자가 강제로 업데이트하려면 응용 프로그램의 최소 필수 버전을 설정하십시오 (응용 프로그램 업데이트 대화 상자에 있음).

+0

나는 앱을 웹 사이트에 삽입 된 상태로 유지하려고하며, ClickOnce는 웹 사이트 외부에서 실행되도록 할 것입니다. 또한 ClickOnce 앱의 로딩 시간은 내가 선호하는 것 이상입니다. – Rachel

0

응용 프로그램 캐싱은 매니페스트 파일 캐싱을 통해 이루어지며 서명이 변경되면 매니페스트는 로컬 파일을 업그레이드합니다 (또한 변경된 파일 만 업그레이드 함). HTTP 응답에 올바른 헤더가 있는지 확인하십시오. 경우에 따라 동적 페이지 캐시 설정 또는 호스팅 제공 업체의 전역 설정이 방해 받기도합니다. 나를 위해, 그것은 항상 상자에서 작동합니다.

0

ClickOnce는 저처럼 매력적이었습니다. 또한 XBAP의 버전을 올바르게 지정해야합니다.

2

몇 년 전에 우리는 일반 웹 사이트에서이 문제를 겪었습니다. 그것은 계속 우리를 따라 잡았고 결국에는 새로운 버전마다 URL 접두어가 변경되었습니다. 첫 번째 페이지는 캐시되지 않으며 업데이트 된 URL로 전달됩니다.

해결 방법은 없지만 매우 안정적인 방법입니다.

0

필자의 웹 프로젝트에서 Filest를 ClientBin 디렉토리에 복사하는 것으로 Xbap을 배포합니다. iframe에 표시합니다. 응용 프로그램을 "새로 고침"버전으로 만들려면 빌드하기 전에 Xbap 프로젝트에서 "게시 버전"을 변경해야합니다. 프로젝트 속성 -> 게시 -> 게시 버전.

이것은 xbap 및 매니페스트 파일의 버전을 변경하여 클라이언트가 최신 버전을 다운로드하도록합니다.

관련 문제