개발자 대시보드를 켜 놓고 확인을 하다가 아래와 같은 메시지를 보게 되었습니다.
General Unexpected 90hv Detected use of SPRequest for previously closed SPWeb object. Please close SPWeb objects when you are done with all objects obtained from them, but not before.
위의 메시지는 그 동안 개발하면서 많이 보아 오던 것입니다.
이 녀석이 왜 나타난건지 찾아보게 되었습니다.
저는 SPWeb 객체를 재대로 닫지 않았을 거라고 생각했는데 그게 아니더군요…
제가 주로 SPWeb 객체를 사용하는 방법은 일단 아래와 같습니다.
using (SPSite oSite = new SPSite(strListUrl, oUserToken)) using (SPWeb oWeb = oSite.RootWeb) { }
위의 에러는 아래와 같은 상황에서 발생됩니다.
SPFile oFile = null; using (SPSite oSite = new SPSite(strListUrl, oUserToken)) using (SPWeb oWeb = oSite.RootWeb) { oFile = oWeb.GetFile("~fileUrl"); }
SP 객체를 Web Scope 안에서 해제되도록 코딩 되어야 하는 것입니다.
위의 코드를 아래와 같이 변경하여 처리 해야 하는 거이지요..
string strTitle = String.Empty; using (SPSite oSite = new SPSite(strListUrl, oUserToken)) using (SPWeb oWeb = oSite.RootWeb) { SPFile oFile = oWeb.GetFile("~fileUrl"); strTitle = oFile.Title; } if(String.IsNullOrEmpty(strTitle)) { // 처리 }
이렇게 하면 해당 에러가 사라지는 것을 확인 할 수 있습니다.
고맙습니다.