2014-11-11 2 views
2

이전 개발자가 시작한 기능을 완료하려고합니다. 그는 Global.asax Application_Start 메서드의 db에서 설정을로드하고 HttpContext.Current.Application [ "SettingName"]에 설정을 저장합니다.이 디자인에 버그가 있습니까?

개발 중에는 내 컴퓨터에서 정상적으로 작동합니다. 프로덕션 환경 에서처럼 보이지만, 처음 사용자를 위해 애플리케이션이 시작될 때 데이터가 한 번로드되지만, 후속 사용자를 위해 애플리케이션에서 설정을 사용할 수 없게되는 것은 실수입니다.

누군가 내 의심을 확인하거나 거부 할 수 있습니까?

답변

2

HttpContext.Current.Application["SettingName"]은 정적 속성입니다. 다음 순차 사용자도 사용할 수 있습니다. 그러나 웹 가든을 사용하면 쉽게 변경할 수 없습니다. 디자인이 얼마나 Using static variables instead of Application state in ASP.NET

는 나도 몰라,하지만 당신은 데이터베이스에서 직접 읽기의 ... 같은 대한 매개 변수를 단순한 정적 사전을 사용하거나에서 할 수 있습니다

여기에서 자세한 내용을 읽을 수 있습니다 web.config.

+1

정적 변수가 아닙니다. 이것은 HTTP 컨텍스트 당 정적 속성입니다. 컨텍스트는 요청 당입니다. – vcsjones

+0

@vcsjones 몇 가지 테스트를 해보십시오. 컨텍스트는 유지 상태이고 요청 당 아닌지요? 정적 속성 인 정적 사전을 찾습니다 ...당신이 웹 정원을 가지고있는 경우에만 동일하게 유지되지 않으며, 당신이 찾고있는 수영장에서 매번 의존합니다. – Aristos

+1

좋습니다, 우리는 실제로 둘 다 옳습니다. 'HttpContext.Current'는 요청 당이지만,'Application'은 요청을 통해 공유됩니다. 편집을하기 전까지는 투표를 취소 할 수 없습니다. – vcsjones

1

web.config 파일에 설정을 입력하고 ConfigurationManager 개체를 사용하여 해당 설정을 읽는 것이 좋습니다. HttpContext에 저장할 필요가 없으므로 훨씬 간단합니다.

예컨대 이렇게

<configuration> 
    <appSettings> 
     <add key="SettingName" value="SettingValue" /> 
    </appSettings> 
</configuration> 

는 설정은 전체 ASP.NET 응용 프로그램에 사용할 수 있습니다 의미 - HttpContext에 저장 할 필요가 없습니다.

web.config 파일을 업데이트하면 ASP.NET 사이트의 응용 프로그램 풀이 재활용된다는 경고가 있습니다. 그러나이 결과는 세션 상태 및 캐싱과 같은 사이트에서 수행중인 작업에 따라 달라집니다. 응용 프로그램 풀을 Recylcing하는 사람들을 재설정,하지만

편집 ..... 또 다른 질문에 대한 의지 : session state 여기에 당신을 도울 것 같은 의견을 바탕으로

, 그것은 소리. 세션 상태를 사용하면 다른 사용자를 방해하지 않도록 사용자 별 설정을 저장할 수 있습니다.

+0

감사합니다. Jason이지만 사용자가 수정할 수있는 설정입니다. – BVernon

+0

또한이 코드는 리팩토링하지 않으려 고 애 쓰고있는 어플리케이션 중 하나입니다. 코드를 너무 많이 작성하지 않아도됩니다. 실제 코드를 6 주 연속 수행하고 수행해야 할 실제 작업을 진행할 수 없기 때문입니다. 그래서 내가 가서 문제를 풀기 전에 실제로 이것이 문제가되는지를 알아 내려고하는 것입니다. – BVernon

+0

정적 변수가 더 적절하다고 생각합니다. 관리자 (웹 관리자가 아닌 앱의 관리자) 만 (앱 내에서) 설정을 변경할 수 있으며 모든 사람이 변경할 수 있습니다. – BVernon

1

나는 일반적으로 Application_Start에서 HttpContext를 건드리지 않을 것입니다. 사실, IIS의 통합 파이프 라인 (Integrated Pipeline)이 그렇게 할 수 있다고 생각하지 않습니다.

통합 된 파이프 라인을 사용하면 IIS 8의 Application Initialization과 같은 요청이 서버에 도착하기 전에 Application_Start이 실행될 수 있습니다.

관련 문제