2008-10-21 4 views
2

일반 네트워크 드라이브에있는 CSV 파일을 구문 분석해야하는 여러 IIS 서버에서 실행되는 응용 프로그램이 있습니다. 파일을 사용할 수있을 때 System.IO.FileSystemWatcher Created event 이벤트 알림을 받으면 하나의 서버 만 파일을 구문 분석하도록하려면 어떻게해야합니까? 모든 서버에이 변경 사항이 통지되면 모든 서버가이를 분석하려고 시도합니다. 첫 번째 서버가 로컬로 복사 한 다음 구문 분석해야합니까? 이로 인해 다른 서버에서 오류가 발생합니까? 하나의 서버가 읽기 액세스 만 허용하도록 원격 디렉토리 액세스를 설정해야합니까?하나의 서버가 네트워크 드라이브의 파일에만 액세스하도록 허용

파일에 공유 데이터베이스에 삽입해야하는 레코드가 들어 있지만 레코드의 고유 키는 없습니다. 따라서 둘 이상의 서버가 동시에 파일을 가져 와서 레코드를 삽입하면 데이터베이스에 중복 된 레코드가 생깁니다.

+0

제목을 변경하면 더 많은 관심을받을 수 있습니다. IIS와 FileSystemWatcher는 핵심 문제와는 아무런 관련이 없습니다. 나는 그들을 버려 두는 것이 좋습니다. – Tomalak

답변

2

중요한 질문은 : 그들 모두가 대략적으로 동시에 파일을 시도하고 분석 할 때 어떤 나쁜 일이 발생합니까? 기본적으로 다중 읽기 액세스는 파일 시스템 수준에서 허용되므로이 사실만으로는 아무 것도 깨뜨릴 수 없습니다.

아마도 첫 번째 파일 액세스시 잠금 파일을 만드는 방법을 시도하고 서버가 파일에 액세스하기 전에 잠금 파일을 찾습니다. 완료되면 잠금 파일을 삭제하십시오.

파일에 단독 잠금을 설정할 수도 있습니다. 한 번에 하나의 서버 만 가능합니다. 다른 사람은 시도를 실패합니다 :

FileStream fs = new FileStream(
    FilePath, 
    FileMode.Open, 
    FileAccess.ReadWrite, 
    FileShare.None 
); 
0

잠금 대신 다른 옵션은 파일을 디렉토리로 이름을 바꾸는 것입니다. 각 서버에 대한 하위 디렉토리를 만든 다음 서버가 해당 디렉토리에 파일 이름을 다시 지정하도록합니다 (이름 바꾸기는 원자 작업입니다). 성공한 파일을 파싱합니다.

잠금 문제는 파일이 여전히 각 서버에 표시 될 수 있으며 파일을 열어 본 다음 오류가 반복 될 수 있으므로 까다로울 것입니다. 이름 바꾸기는 파일의 소유자에 대해 절대적입니다.

"파일 손실"가능성을 염두에 두십시오. 서버가 파일 처리를 중단하면 (오류, 예외, 재부팅) 폐기 될 수 있습니다. 이러한 유형의 문제에 대한 일반적인 해결책은 서버 감시자 (File Watcher)와 같은 것뿐만 아니라 서버 폴링 (Polling Survey)과 같은 것들입니다.

파일을 서버 디렉토리에 복사하면 약간의 도움이됩니다. 한 가지 단점은 서버가 완전히 오프라인 상태가되면 서버가 온라인 상태가 될 때까지 해당 파일이 디렉터리에 저장된다는 것입니다.

관련 문제