끔찍하게 작성된 SharePoint 프로젝트를 상속했을만큼 행복했습니다.
원래 개발자는 재사용 가능한 코드를 많이 사용했습니다 (30 %의 코드가 라이브러리를 사용하지 않고 20 개 프로젝트에서 재사용됩니다.).처분 된 SPSite 및 SPWeb 개체 사용
코드를 사용하여 Common.OpenWeb
메서드를 호출하여 SharePoint 항목을 조작하기위한 SPWeb
개체를 검색하는 경우가 자주있었습니다. 이 함수의 화신 대부분은 정확히 같습니다.
public SPWeb OpenWeb()
{
String strSiteUrl = ConfigurationManager.AppSettings["SiteUrl"].ToString();
SPSite site = null;
SPWeb web = null;
try
{
using (site = new SPSite(strSiteUrl))
{
using (web = site.OpenWeb())
{
return web;
}
}
}
catch (Exception ex)
{
LogEvent("Error occured in OpenWeb : " + ex.Message, EventLogEntryType.Error);
}
return web;
}
이제 저는 정말로 걱정됩니다.
어떻게 작동합니까? 이 메서드는 항상 폐기 된 객체를 반환합니다.
정확히 어떻게 불안정합니까?
는는 UPDATE :이 방법은 다음과 같은 방식으로 사용된다
:
oWeb = objCommon.OpenWeb();
SPList list = oWeb.Lists["List name"];
SPListItem itemToAdd = list.Items.Add();
itemToAdd["Some field"] = "Some value";
oWeb.AllowUnsafeUpdates = true;
itemToAdd.Update();
oWeb.AllowUnsafeUpdates = false;
난 간결 연하
try-catch
을 생략한다.
이 코드는 값을 목록에 삽입합니다. 이것은 쓰기 작업입니다. 저는
Request
속성이이 용도로 사용되고 있음을 확신합니다. 그렇다면 어떻게 작동할까요?
배치 된 객체를 반환하는 것이 불안정 할뿐만 아니라 예외가 기록되고 무시됩니다. –
적어도 메모리는 배가 고프지 않습니다. – rene
메소드는 실제로 폐기 된 객체를 반환합니다. 그 객체에 대한 모든 호출은 이론적으로'ObjectDisposedException'을 던져야합니다. 나는 그것이 결코 작동하지 않았거나 그러한 처분 된 물건에 대한 어떠한 요구도하지 않았다고 의심한다. –