2010-02-17 5 views
1

구체적으로 내가 수행하고자하는 것은 다음과 같습니다.한 스레드에서 이벤트가 발생하면 .Net의 다른 스레드에서 작업/메서드를 실행하는 가장 좋은 방법은 무엇입니까?

.Net 3.5 사용하기. WCF 서비스를 실행하는 Windows 서비스가 있습니다. WCF 서비스 (Net.Tcp 바인딩)의 파일을 요청하는 클라이언트가 있는데,이 파일은 WCF 서비스에 의해 지정된 위치로 복사됩니다. 그러면 클라이언트가 편집/수정할 수 있습니다. WCF 서비스는 InstanceContextMode.PerSession 모드에서 작동합니다.

파일을 편집하는 동안 WCF 서비스가 호스팅되는 컴퓨터에서 파일을 잠급니다. 파일이 반환되면 파일 잠금을 다시 해제하고 싶습니다. 파일 복사가 끝나면 서비스 세션이 끝날 때 WCF 서비스 내에서 파일을 잠글 수 있다고 생각하지 않습니다. 파일 잠금이 그 시점에서 유지되지 않는다고 가정합니다.

하나의 솔루션 (나는별로 흥분하지 않는다)은 Windows 서비스 내에 스레드를 만들어서 파일 목록을 유지하고 필요에 따라 잠금/잠금 해제 할 수 있습니다. 물론이 목록에 대한 액세스는 멀티 스레드 액세스를 위해 동기화되어야합니다. 이 솔루션은 추가되는 새 파일과 제거되는 파일을 탐지하기 위해 목록을 계속 폴링해야합니다.

마음에 드는 접근 방식은 잠금/잠금 해제가 필요할 때마다 WCF 서비스 내에서 이벤트를 트리거하는 것입니다. 상시 폴링과 반대입니다. 그러나 잠금/잠금 해제 작업의 실행은 다른 스레드 (예 : Windows 서비스의 컨텍스트에서 실행되는 스레드)에서 발생해야합니다.

우리는 백그라운드 스레드에서 UI 메시징 스레드에서 실행할 메서드를 호출 할 수있는 Windows Forms에서이 작업을 수행합니다. 다른 스레드 (UI 메시징 스레드 아님)에서 메소드를 "호출"할 수 있습니까?

가장 좋은 접근 방법에 대한 제안 사항이 있으십니까?

답변

0

MS Office는 대상 파일 이름과 비슷한 이름의 별도 파일로이 작업을 수행합니다. 목적지에 대한 모든 액세스 권한이있는 한 비슷하게 수행 할 수 있습니다. 나는 실제로 아무것도 잠그지 않으려 고 노력할 것입니다.

체크인/체크 아웃 절차와 실패한 체크 아웃 및 실패한 체크 아웃 및 반환되지 않은 체크 아웃을 복구하는 방법이 필요합니다.

1

이 문제를 해결하는 잠금/잠금 해제 서비스가 있다고 생각하십니까? 이렇게하면 필요할 때 WCF에서 잠금 서비스를 호출하고 다른 서비스가 잠금 문제를 처리하게 할 수 있습니다. 이 서비스는 고아 체크인 등을 처리합니다.

관련 문제