2011-09-26 9 views
6

일반 어셈블리의 경우 MEF를 사용하여 어셈블리를 동적으로로드 할 수 있습니다. 이러한 어셈블리에 대한 라이브 업데이트가 필요한 경우 AppDomains를 사용하여 동적 어셈블리를 호스트하는 것이 좋습니다 (잠재적으로 하나의 MAF (Managed Add-in Framework) 사용 가능). 업데이트가 필요할 때 appdomain이 중지되고 어셈블리가 업데이트되고 appdomain이 다시로드됩니다.ASP .NET에서 웹 페이지를 동적으로 플러그인하는 방법 (및 플러그인을 업데이트하는 방법)?

코드 숨김 코드가 포함 된 ASP .NET에서로드되는 어셈블리는 어떻게됩니까? 주 appdomain을 다시 시작하지 않고 어떻게 업데이트 할 수 있습니까? 동적 인 appdomain에서 일부 페이지를 호스팅 할 수 있습니까? 어떻게 그럴 수 있니? 이 appdomain은 로그인 토큰과 인증 정보를 공유 할 수 있으므로 사용자는 다시 로그인 할 필요가 없습니다.

감사

답변

2

MEF는 응용 프로그램 도메인 격리를 지원하지 않기 때문에 불행하게도, 심지어 재구성하는 동안, 이전에로드했던 그 어셈블리는 여전히 주요 웹 응용 프로그램의 응용 프로그램 도메인에로드됩니다. 이 ASP.NET에서 전투하는 당신이 필요로하는 것 두 가지이다 :

  1. 실제 파일의 변경 (예 : .ASPX, .cshtml 등), 또는 변경 파일 (의 .config)을 구성하거나 \ bin 디렉토리를 변경하면 응용 프로그램이 재활용됩니다. 이는 페이지/config 파일 모니터링과 \ bin 디렉토리 모니터링 (기본적으로 ASP.NET은 파일의 섀도 복사본을 사용하기 때문에 권장 됨)의 두 가지 때문입니다.

  2. 다른 AppDomain에서 MEF를 사용하려면 일련 번호 지정 또는 MarshalByRef을 통한 엄청난 양의 크로스 도메인 통신이 필요합니다. 그 중 일부는 깨끗한 구현이라고 생각하지 않습니다. BuildProvider 인스턴스를 다른 AppDomain에서 페이지를 동적으로 컴파일하는 데 사용되는 인스턴스를 트리거하는 방법을 잘 모릅니다.

당신이 이것을 너무 많이 생각하고 있는지 궁금합니다. IIS6, HTTP.SYS가 들어오는 요청을 적절한 웹 사이트로 라우팅하는 것을 관리했기 때문에 이것은 커널 수준에서 처리됩니다. 주 응용 프로그램이 다시 시작된 경우 (이유가 여러 가지 이유가 있음)에도 요청이 삭제되지 않고 요청을 전달하기 전에 새 작업자 프로세스를 기다리는 대기열에 놓입니다. 물론, 사용자의 입장에서 보면 새 응용 프로그램이 다시 시작될 때까지 대기하는 유휴 시간이 있음을 알 수 있지만 현실적으로 얼마나 자주 이러한 변경 작업을 수행 할 예정입니까?

과도한 엔지니어링으로 많은 응용 프로그램 설계가 어려움. 모든 시나리오에 맞게 설계하고 싶지만 실제로는 단순하지만 확장 가능한 시스템을 유지하는 것이 더 쉽습니다. 내 의견으로는, 당신이 지정한 일을하고 싶다는 것은 over-engineering으로 분류 될 것입니다. 단순하게 유지하십시오.

+0

간단히 말해서 수영장을 재활용 한 다음 새 어셈블리를 다시로드하는 것이 좋습니다. 내가 너를 제대로 이해하고 있니? – Mark

+1

한마디로, 그렇습니다. 실망스러운 답변 일 수도 있지만 ASP.NET 응용 프로그램은 이러한 방식으로 실행되도록 설계되었습니다. 응용 프로그램에 대한 기능 세트를 계획 할 때 설계중인 기능이 가장 일반적인 사용 사례인지 여부를 고려해 볼 가치가 있습니다. 말이 돼? –

+0

하위 웹 응용 프로그램 (중첩 된 웹 응용 프로그램)을 만들어서 부모가 아닌 자식 응용 프로그램을 재생할 수있는 아이디어가있었습니다. 그것에 대해 어떻게 생각하세요? 조금 더 많은 일이 있을지 모르지만 유연성이 더 좋습니까? – Mark

0

세션 "StateServer"를 사용하면 응용 프로그램 풀 재활용 (파일 업데이트로 인한)간에 인증이 유지됩니다. 실제 질문에 대한

:

  • 앱 풀에 액세스 할 수있는 웹 사이트 외부의 폴더를 만듭니다.
  • 가에 새 어셈블리를 넣어이
  • 폴더를 읽고 현재 응용 프로그램 도메인
    • 총회에 어셈블리를로드하는 작업/스레드/웹 서비스가있다.인스턴스가 나는 귀하의 질문에이 방법이 작동하지 않습니다 말하는 것 같아요

을 만들 때 LoadFrom (문자열) http://msdn.microsoft.com/en-us/library/1009fa28.aspx

    • 어셈블리의 최신 버전이 우선해야합니까? 어떤 오류가 발생하고 있습니까?