반응형
.Net MVC솔루션 개발 중
Ajax를 [Async:true] 로 호출해도 프리징 현상이 일어나서 원인을 파악해보니,
Sesstion State를 사용하면 Session Access Lock으로 인해 Serialize하게 동작하는 것을 확인했다,
이를 위한 해결 방법으로는 Controller에 Attribute를 사용하는 방법이 있습니다.
1
|
[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
|
cs |
APIController에서 Session을 사용할 수 있는데, 사용하기 위해서는 Global.asmx에 이부분을 입력 하면 됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
private const string _WebApiPrefix = "api";
private static string _WebApiExecutionPath = String.Format("~/{0}", _WebApiPrefix);
protected void Application_PostAuthorizeRequest()
{
if (IsWebApiRequest())
{
HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.ReadOnly);
}
else
{
HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);
}
}
private static bool IsWebApiRequest()
{
return HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath.StartsWith(_WebApiExecutionPath);
}
|
cs |
[ APIUrl이 api/{Controller}/{action}일때는 ReadOnly 그외에는 Required ]
해당 소스에서 _WebApiPrefix변수와 Application_PostAuthorizeRequest 메소드를 이용해 세션 사용여부를 사용합니다.
HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required 가 Session을 읽기/쓰기사용하는 설정이고,
HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.ReadOnly가 Session을 읽기만 하는 설정입니다
위 변수와 WebApiConfig.cs 를 통해 원하는 용도에 맞게 API를 이용할 수 있습니다.
감사합니다.
반응형
'BackEnd > ASP .NET' 카테고리의 다른 글
[ASP.NET] WEB API에서 세션(SESSION) 사용하기 (1) | 2017.04.10 |
---|