WCF 클라이언트/서버를 개선하여 현재의 것보다 빠르게 많은 수의 작은 파일을 처리하려고합니다.많은 수의 작은 파일 다운로드
나는 네트워크를 통해 파일을 이동하기 위해 WCF 클라이언트와 서버를 작성했습니다.
나는 그것이 스트림
간단한 예를 반환하는 서버를 가진 후 클라이언트에서 서버로 전화를 걸 (I 매개 변수로 다운로드 할 파일의 이름을 전송)에 의해 작업이 :
//CLIENT CODE>>
Stream stream = syncService.GetStream(fileName);
//<<CLIENT CODE
//SERVER CODE>>
public Stream GetStream(string fileName)
{
string filePathOnServer = ServerService.Service1.SERVER_FILES_PATH + fileName;
return File.OpenRead(filePathOnServer);
}
//<<SERVER CODE
여러 파일을 가져와 클라이언트 컴퓨터의 파일에 저장해야하는 경우 GetStream을 재귀 적으로 호출합니다. 적은 수의 대용량 파일을 이동할 때 잘 작동합니다. 문제는 크기에 관계없이 하나의 파일을 다운로드하는 오버 헤드가 약 1/10 초입니다. 따라서 1Kb 파일의 엄청난 수를 다운로드하고 싶다면 필자는 본질적으로 최대 10Kbs까지 제한됩니다.
누군가가 대체 구현에 대한 제안을 받기를 바랍니다. 서버에서 스트림 목록을 반환하려고했지만 WCF가이 목록을 허용하지 않습니다.
파일을 압축하지 않고이 작업을 수행 할 수 있어야합니다.
여러 스트림으로 구성된 하나의 스트림을 반환하려고 시도했지만 더 나은 방법이 있는지 확신 할 수 없습니다.
파일 목록을 매개 변수로 전달하고 모든 파일을 단일 스트림으로 반환하는 것이 좋습니다. 간단히 각 파일 앞에 스트림의 파일 길이를 추가하고 반환 된 데이터를 파싱하고 분할하십시오. – Pete
@Pete 답장을 보내 주셔서 감사합니다. 그것은 내가 현재 고려하고있는 것이지만 더 나은 선택이 될 것이라고 생각했습니다. 누구든지 다른 제안이 있는지를 기다리는 동안 코딩 할 것입니다. – HaemEternal
서비스 호스팅 방법은 지정하지 않지만 IIS에서 호스팅되는 경우 각 WCF 메서드 호출에 대해 HTTP 연결을 만들어 열어야합니다. 많은 호출을 처리 할 때 오버 헤드가 많습니다. – Pete