2013-11-21 2 views
0

ASP.NET MVC 5.0을 사용하여 서버 모니터링 응용 프로그램을 만들고 싶습니다. 서버를 사용할 수없는 경우 서버 상태에 대한 세부 정보가 포함 된 Json 콘텐츠와 함께 HTTP 503 상태 코드를 반환하려고합니다. 또한 특정 응답 (예 : 10 초) 동안 ASP.NET 출력 캐시를 사용하여이 응답을 캐시하고 싶습니다.HTTP 503 상태 코드 용 ASP.NET MVC OutputCache

내가 직면 한 문제는 상태 코드가 HTTP 200이지만 HTTP 503이 아닌 경우 ASP.NET MVC 5.0의 OutputCache 필터가 작동한다는 것입니다. 다음은 응용 프로그램에서 사용중인 MVC 동작의 샘플 코드입니다.

HTTP 200 이외의 HTTP 상태 코드는 캐시 할 수 있습니까? Ouput Cache 또는 IIS 설정을 통해 HTTP 503 응답을 캐시하는 다른 메커니즘이 있습니까?

[OutputCache(Duration = 10, VaryByParam = "*")] 
public ActionResult GetServerStatus(string serverId) 
{ 
    var serverStatus = .... //JSON object 
    if(serverStatus.IsAvailable) 
    { 
     this.Response.StatusCode = (int)HttpStatusCode.OK; 
    } 
    else 
    { 
     this.Response.StatusCode = (int)HttpStatusCode.ServiceUnavailable; 
    } 
    return Json(serverStatus); 
} 

답변

1

내가 아는 한 OutputCache는 유효한 응답 만 캐시합니다. 나는 소스 코드를 빠르게 살펴 봤고이 동작을 무시하는 확실한 방법을 볼 수 없다.

가장 간단한 대답은 서버 상태를 직접 캐싱하는 것입니다. 같은

뭔가 :

public ActionResult GetServerStatus(string serverId) 
{ 
    string serverStatus = Cache["someKey"]; 
    if(serverStatus == null) 
    { 
     serverStatus = ...; 
     // Use Cache.Insert for setting duration etc 
     Cache["someKey"] = serverStatus; 
    } 

    if(serverStatus.IsAvailable) 
    { 
     this.Response.StatusCode = (int)HttpStatusCode.OK; 
    } 
    else 
    { 
     this.Response.StatusCode = (int)HttpStatusCode.ServiceUnavailable; 
    } 

    return Json(serverStatus); 
} 

트릭을 할해야합니다. 그래서 주변에서 검색을하면 Cache를위한 유용한 래퍼 (wrapper)를 찾을 수 있습니다.이 래퍼는 약간 "더 멋지게"삽입 및 검색합니다.