반응형

.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

+ Recent posts