2009-03-14 6 views
6

사이트에 사용자가있는 동안 실제로 작동하는 ASP.NET (2.0 이상) 응용 프로그램에 대한 업데이트를 처리하는 방법에 대한 이해를 얻으려고합니다.사이트가 라이브 일 때 ASP.NET 웹 응용 프로그램 다시 게시

예를 들어 SO가 ASP.NET 웹 응용 프로그램 프로젝트라고 가정합니다. 프로젝트 코드는 BIN 폴더의 단일 .DLL로 컴파일됩니다. 이제는 계속해서 사용자가 있기 때문에 사이트를 사용하는 동안 Visual Studio .NET "게시"기능을 사용하거나 수동으로 모든 것을 FTP로 다시 사용할 경우 사용자의 작업/세션은 어떻게됩니까?

대신 ASP.NET 웹 사이트를 만들면 위의 시나리오에있을 수도 있고 없을 수도있는 문제가 완화됩니까? 나는 사용자 중심의 웹 애플리케이션으로서 웹 사이트를 개발하기 시작했으며, 이것으로 나의 경험 부족이 잠재적으로 많은 사람들에게 내가 24/7을 갖고 싶어하는 많은 사람들을 괴롭히지 않도록하고 싶다.

편집 : 죄송합니다. 좀 더 정확한 문맥에 넣어야합니다. 이 사이트가 월간 요금으로 웹 호스팅 서비스에 의해 호스팅되고 있다고 가정합니다. 나는 서버 자체를 관리하지 않을 것이며 웹 호스트가 서비스 사용자로 허용하는 것일뿐입니다.

답변

4

asp.net 웹 사이트 모델로 변경해도 재활용되지 않으므로 web.config, global.asax, app_code 등의 변경 사항이 적용됩니다.

asp.net이 구문의 유효성을 검사하기 때문에 재활용 후 사용자는 여전히 로그인됩니다. 그것은 고정 된 기계 키를 사용하는 경우 주어지며, 그렇지 않으면 매번 재활용 할 때마다 변경됩니다. 이는 키가 요청 (예 : viewstate 유효성 검사, 포함 된 리소스 (URL 암호 해독 실패))을 가로 질러 키가 변경되면 다른 것들이 중단 될 수 있기 때문에 어쨌든하고 싶은 작업입니다.

sql 서버와 같이 세션을 처리 할 수없는 경우 세션 손실을 피할 수 있습니다. 그렇게 할 수 없다면, 코드가이를 고려해야합니다. 세션 사용을 피할 수있는 시나리오가 많이 있으며 세션을 정리하면 정보를 다시 감쌀 수 있습니다. 이렇게하면 사용자에게 문제를 일으킬 수있는 몇 가지 구체적인 사례가 남게됩니다. 따라서 다른 사람들이 이미 제시 한 제안을하는 사람들에게 문제가 될 수 있습니다.

1

하나의 솔루션은 응용 프로그램을 부하 분산 환경 (웹 팜)에 배포하는 것일 수 있습니다.
새 버전을 배포 할 때로드 밸런서를 사용하여 배포하지 않을 서버로 요청을 리디렉션합니다.

0

나는 그것을 처리하는 방법을 잘 모르겠다.하지만 우리는 일반적으로 지주 페이지를 넣는다. 따라서 사용자가 수행 한 작업 (질문 추가 또는 질문 응답)은 업데이트되지 않습니다. 그가 무언가를 업데이트하자마자 언젠가 후에 시도 할 것을 요구하는 홀딩 페이지가 보일 것입니다.

그리고 내가 사용자 인 경우 일반적으로 입력 한 내용이 브라우저 기록에 저장되어 나중에 게시 할 수 있도록 뒤로 버튼을 누릅니다.

일부 사이트 사용은 클러스터 된 환경에 있으므로 한 대의 서버를 오프라인으로 설정하고로드 밸런서에게 사용할 수 없음을 알리고 새 버전이 제대로 작동하는지 확인한 후에 라이브로 만듭니다. 다음 서버에서도 똑같이.

다른 옵션이 있습니까?

1

App_offline.htm 내가 생각하기에 훌륭한 솔루션입니다.

에 있으므로 배포가 시작될 때 현재 애플리케이션을 사용할 수없는 페이지가 표시됩니다.

+1

App_offline.htm에 대한주의 사항 중 하나는 웹 가든에서는 작동하지 않는다는 것입니다. (글쎄, 그렇긴하지만, 작업자 프로세스는 다음 페이지 히트에만 돌아 간다. 그래서 여러 번 새로 고쳐야하고 그들 사이에서 라운드 로빈이되기를 바란다.) 방법. –

5

IIS에서 두 개의 웹 사이트를 만듭니다. 하나는 프로덕션 웹 사이트이고 다른 하나는 HttpHandler가있는 정적 웹 사이트이며 모든 요청을 HTTP 503 서비스를 사용할 수없는 상태로 제공되는 정적 "We 're updating"HTML 페이지로 보냅니다. 일반적으로 업데이트 웹 사이트는 해제되어 있습니다. 업데이트 할 시간이되면 프로덕션 웹 사이트를 중지하고 업데이트 웹 사이트를 시작합니다. 잠긴 DLL이나 작업 프로세스를 스핀 다운 할 필요없이 걱정없이 프로덕션 웹 사이트를 조작 할 수 있습니다.

  • App_Offline.htm 정말 우리가 사용하는 웹 정원에서 잘 작동하지 않기 때문에

    나는이 일을 시작했다.
  • App_Offline.htm은 해당 페이지를 404로 제공합니다. 이는 의미있는 기간 동안 작동하지 않을 경우 나빠질 수 있습니다.
  • 변경된 설정 (로컬 호스트에서만 수신)으로 업그레이드 된 프로덕션 웹 사이트를 시작할 수 있습니다. 여기서는 스위치를 열기 전에 모든 것이 작동한다는 최종 승인/확인을 수행하고 업데이트 웹 사이트를 끄고 - 프로덕션 웹 사이트를 사용하도록 설정합니다. 당신은 여전히 ​​페이지가 제공되지 않은 다운 타임이 -이 해결되지

상황이

  • 서버를 다시 시작해야합니다 유지 보수가 포함되어 있습니다.
  • 최신 서비스 팩으로 업그레이드하는 것처럼 .NET 런타임과 관련이없는 유지 관리. 내가 본

다른 접근 방법이

  • 두 서버를 갖는 등이 있습니다. 하나의 서버에 모든로드 균형 조정 요청을 보내고 다른 하나는 업그레이드하십시오. 그런 다음 헹구고 반복하십시오. 우리 중 대부분은이 사치품을 갖고 있지 않습니다.
  • bin-1.0.0.0 및 bin-1.1.0.0과 같이 여러 개의 bin 디렉토리를 만들고 web.config 파일에서 사용할 bin 디렉토리를 ASP.NET에 알려줍니다. (한 가지 장점은 설정 파일을 편집하는 것만으로 이전 바이너리로 되돌릴 수 있다는 것입니다. 단점은 바이너리에서 끝나지 않는 리소스 (예 : 템플릿 및 이미지 등)를 되돌리기 어렵다는 것입니다. 이것이 실제로 어떻게 작동했는지 기억하십시오 - 저는 web.config 섹션을 기반으로하는 Global.asax에서 어플리케이션이 늦은 어셈블리 로딩을 한 것 같습니다 (web.config를 건드린 이후 앱이 다시 시작되었으므로 괜찮습니다).

더 좋은 방법을 찾으면 알려주세요.

+0

아주 좋은 정보입니다, 감사합니다. 그뿐만 아니라, 당신의 대답은 내 원래의 질문이 부족하다는 것을 지적했습니다. 나는 "$?. ??/달"웹 호스트에있는 사이트의 제약 조건을 추가하기 위해 내 질문을 편집했습니다. IIS에 액세스 할 수 없지만,이 대답은 직장에서 나를 도와 줄 것입니다.) – HardCode

+0

** 정적 ** HTML 파일의 상태 코드를 설정하는 방법을 공유 하시겠습니까? –

0

기술 솔루션은 아니지만 예약 된 유지 관리 기간을 설정하십시오. 해당 기간 동안 해당 응용 프로그램을 사용할 수 없다는 가능성을 사용자에게 알리면 사전에 경고 할 수 있습니다.

관련 문제