ASP를 교체합니다.넷의 세션 전체
ASP.Net 세션은 기존의 WebForms 앱에는 완벽한 것처럼 보이지만 최신 AJAX 및 MVC 애플리케이션에는 심각한 문제가 되는 작업을 수행합니다.
구체적으로 ASP에 액세스하는 방법은 3가지뿐입니다.넷 공급자:
읽기 및 쓰기 잠금(기본값) - 세션 잠금 위치
AcquireRequestState
까지 발사ReleaseRequestState
한 번에 브라우저에서 3개의 요청이 발생하면 서버에서 대기열에 들어갑니다.MVC 2의 유일한 옵션이지만 MVC 3은...비잠금 읽기 전용 - 세션이 잠겨 있지 않지만 저장할 수 없습니다.그러나 일부 읽기는 세션을 다시 잠그는 것처럼 보이기 때문에 신뢰할 수 없는 것으로 보입니다.
세션 비활성화 - 세션에 읽기 또는 쓰기를 시도하면 예외가 발생합니다.
그러나 최신 MVC 앱을 사용하면 많은 AJAX 이벤트가 한 번에 발생합니다. 서버의 대기열은 원하지 않지만 세션에 쓸 수 있기를 바랍니다.
제가 원하는 것은 네 번째 모드입니다.더티 읽기, 마지막 쓰기 승리
이를 위한 유일한 방법은 ASP를 완전히 대체하는 것이라고 생각합니다.넷의 세션.나는 나만의 공급자를 작성할 수 있지만, ASP는 여전히 지원하는 세 가지 패턴 중 하나로 그것을 호출할 것입니다.ASP를 만들 방법이 있습니까?순 지원 낙관적 동시성?
이로 인해 세션에 대한 모든 호출을 기본적으로 동일한 작업을 수행하지만 잠기지 않는 새로운 클래스로 대체할 수 있습니다. 이는 고통입니다.
코드 교체를 최소화하면서 가능한 한 많은 현재 세션 정보(다양한 로그의 세션 ID 중 가장 중요한 것)를 유지하고 싶습니다.이것을 할 수 있는 방법이 있습니까?내가 원하는 이상적인 것은HttpContext.Current.Session
ASP가 없는 새로운 반을 가리키기 위해서입니다.모든 요청을 네트워크로 잠급니다.
이미 이런 일을 한 사람이 있습니까?모든 AJAXey MVC 앱이 있는 것이 ASP의 새로운 문제라는 것이 이상해 보입니다.
우선 저는 MS asp.net 가 asp.net 4의 "webengine4.dll" dll 어딘가에 "asp.net 페이지 처리" 세션의 핵심에 잠겨 있다고 말합니다.
저는 .asp.net act correct and lock the session this way
.net 은 의 정보를 하는지 알 수 "마지막 쓰기 를 만들 수 있습니다. asp.net 은 은 "마지막 쓰기 승리"입니다.
또한 세션 전체 페이지에 대한 잠금은 올바른 방법입니다. 이 방법은 프로그램의 매우 중요한 동기화를 제공하기 때문입니다. 지금 경험에 비추어 볼 때 대부분의 작업에 필요하다고 합니다.ms 세션을 내 세션으로 교체한 후 모든 작업에 대해 글로벌 잠금을 설정해야 합니다. 그렇지 않으면 이중 삽입, 이중 동작 등에 문제가 있습니다.
여기서 제가 인식하고 있는 문제의 예를 제시하겠습니다.세션 데이터는 키 목록인 SessionSateItemCollection에 저장됩니다.세션이 이 컬렉션을 읽거나 쓸 때 이 컬렉션을 모두 함께 수행합니다.자, 이 경우를 보겠습니다.
세션에 "VAR1", "VAR2", "VAR3" 트리 변수가 있습니다.
1 페이지.
session(목록에 ) get session(모든 데이터를 가져옵니다.)
session][= "VAR1] = "data1";
session 저션세장
결과는 VAR1=data1, VAR2=(var2의 마지막 데이터), VAR3=(var3의 마지막 데이터)입니다.
2 페이지.
session(목록에 ) get session(모든 데이터를 가져옵니다.)
session][= "VAR2] = "data2";
session 저션세장
결과는 VAR1=(var1의 마지막 데이터), VAR2=data2, VAR3=(var3의 마지막 데이터)입니다.
3페이지.
session(목록에 ) get session(모든 데이터를 가져옵니다.)
session][= "VAR3] = "data3";
session 저션세장
는 VAR1=), ) ="로 VAR1=(var1의 마지막 데이터), VAR2=(var2의 마지막 데이터) VAR3="data3"입니다.
각 페이지에는 세션 미디어에서 읽은 데이터의 복제본이 있습니다(예: 데이터베이스에서 마지막으로 읽은 데이터).
이 3페이지를 잠그지 않고 실행할 수 있다면 실제로 더티 읽기가 발생하지 않습니다. "마지막 쓰기가 다른 페이지를 파괴"합니다. 다시 생각해보면 VAR1이 변경되었을 때 VAR2와 VAR3가 동일하게 유지되는 이유는 무엇입니까? 다른 곳에서 VAR2를 변경한 경우에는 어떻게 될까요?
그리고 그런 이유로 우리는 이것을 그대로 잠글 수 없습니다.
이제 20개의 변수로 상상해보면...완전히 엉망진창인
가능한 해결책
많은 풀의 asp.net 멀티스레드 때문에 풀과 컴퓨터 간에 동일한 데이터를 유지하는 유일한 방법은 공통 데이터베이스 또는 asp.net State Service와 같은 모든 프로세스 프로그램에 공통 데이터베이스를 사용하는 것입니다.
저는 해당 제안에 대한 프로그램을 만드는 것보다 더 쉬운 공통 데이터베이스를 선택합니다.
이제 우리가 만든 쿠키를 세션의 데이터 사용자에게 연결하고, 우리가 원하는 것, 그렇지 않은 것, 저장하거나 변경하는 방법, 또는 마지막 쓰기 승리 데이터를 비교하고 유지하는 방법을 알고 있는 완전한 사용자 지정 데이터베이스 필드를 사용하여 데이터를 제어하면, 우리는 이 작업을 수행할 수 있고, 일반 세션인 asp.net 세션을 완전히 비활성화할 수 있습니다.키퍼는 모든 필요를 위해 만들어졌지만, 이번과 같은 특별한 경우를 처리하도록 만들어지지 않았습니다.
asp.net 은 향후 릴리스에서 이 작업을 수행할 수 있습니까? 예, 그는 더티라는 추가 필드를 만들고 세션에서 데이터를 저장하거나 더티 필드를 사용하여 데이터를 병합하거나 이와 유사한 작업을 수행할 수 있지만, 적어도 지금까지 제가 발견한 것으로는 현재 상태로 작업할 수 없습니다.
실제로 SessionStateItem은 속성에 더티 플래그가 있지만 데이터 저장이 끝날 때 이 병합을 수행하지 않았습니다.저는 다른 누군가가 기존의 ms asp.net 세션 상태 유지자에 대한 해결책을 생각한다면 정말 좋아할 것입니다. 저는 지금까지 제가 발견한 것을 쓰고 있지만, 이것이 확실히 방법이 없다는 것을 의미하지는 않습니다. - 저는 그것을 있는 그대로 찾지 못했습니다.
모든 것이 도움이 되기를 바랍니다.
사용자 지정 세션 상태 모듈
이 답변 https://stackoverflow.com/a/3660837/159270 에서 사용자 정의 모듈을 작성한 후 James는 다음과 같이 말합니다.ASP의 맞춤형 구현이 아직도 믿기지 않습니다.Net Session은 전체 요청에 대해 세션을 잠급니다.
언급URL : https://stackoverflow.com/questions/8989648/replacing-asp-nets-session-entirely
'itsource' 카테고리의 다른 글
UIView에서 선 그리기 (0) | 2023.08.30 |
---|---|
오라클 테이블에 데이터를 삽입하는 가장 빠른 방법은 무엇입니까? (0) | 2023.08.30 |
두 목록을 교대로 결합(인터리브, 인터레이스, 서로 얽힘)하는 파이썬 방식? (0) | 2023.08.30 |
DSL 요소 'android.dataBinding.enabled'는 더 이상 사용되지 않으며 'android'로 대체되었습니다.buildFeatures.dataBinding' (0) | 2023.08.30 |
Bitnami의 Wordpress 도커 설정을 통한 지속성 (0) | 2023.08.30 |