2008-08-22 5 views
1

한 번의 작업으로 여러 문서 가져 오기를 지원하는 SharePoint 응용 프로그램에서 작업하고 있습니다. 또한 항목 메타 데이터의 기본 유지 관리를 수행하는 ItemAdded 이벤트 처리기가 있습니다. 이 이벤트는 가져온 문서와 수동으로 생성 된 문서 모두에 대해 발생합니다. 퍼즐의 마지막 부분은 작업 흐름을 시작하고 다른 메타 데이터 필드를 업데이트하기 위해 구현 한 배치 작업 기능입니다.Sharepoint COMException 0x81020037

SPListItem의 파일 데이터를 추출하여 COMException 0x81020037이 발생할 수 있습니다. 이 파일은 InfoPath 양식/XML 문서입니다. XML을 수정하고 SPListItem으로 다시 푸시 할 수 있습니다. 나중에 사용자 지정 기능을 해제하고 메타 데이터를 수정하면 가끔 COM 오류가 발생합니다.

오류 메시지는 기본적으로 파일이 다른 스레드에 의해 수정되었음을 나타냅니다. 사용자 지정 기능이 메타 데이터를 변경하는 동안 ItemAdded 이벤트가 파일을 데이터베이스에 다시 쓰는 것으로 보입니다. SPListItem이 거의 성공하지 못하게 수정하는 것을 감지하려고 지연과 오류 잡기 루프를 넣으려고 시도했습니다.

문서에 다른 스레드가 잠겨 있는지 확인하는 방법이 있습니까?

답변

1

간혹 한 번의 작업으로 ItemAdded 또는 ItemUpdated이 두 번 발사되는 경우가 있습니다. ItemAdded() 메서드에 중단 점을 넣으십시오.

private static object myLock = new object(); 
public override void ItemAdded(SPItemEventProperties properties) { 
    if (System.Threading.Monitor.TryEnter(myLock, TimeSpan.FromSeconds(30)) 
    { 
     //do your stuff here. 
     System.Threading.Monitor.Exit(myLock); 
    } 
} 
0

내가 그로보고 다시 연락해야합니다 :

내 경우에는이 솔루션은 ItemAdded() 방법을 스레드 골라하는 것이 었습니다. 결국 내 문제는 다른 클래스에서 실행되는 코드가 다른 기능에서 다른 스레드에 의해 제어된다는 것입니다. 모두 동일한 레코드에 액세스하려고합니다.

고정 지연을 사용하지 않으려합니다. 모든 스레딩 문제로 인해 한 스레드가 예상보다 지연되거나 차단 될 수 있다는 병적 가능성이 있습니다. 로드가 다른 여러 서버 하드웨어에 배포 할 때 이것이 매우 현실입니다. 스펙트럼의 다른 쪽 끝에서, 비록 내가 지연으로 갈지라도, 나는 그것이 30 초가 아닌 매우 높기를 바라지 않는다. 제 의뢰인은 수만 장의 서류를 수입 할 것이며 상당한 시간이 지체되면 수입이 하루 종일 걸릴 것입니다.

관련 문제