원격 FTP 서버에서 큰 파일 (100MB 이상)을 스트리밍하는 WCF 서비스가 있습니다. WCF 클라이언트에 파일을 스트리밍으로WCF 스트림을 반환하는 동안 파일로 스트리밍 하시겠습니까?
는[ServiceContract]
public interface IStreamService
{
[OperationContract]
Stream GetDataFromFtp();
}
public class StreamService : IStreamService
{
public Stream GetDataFromFtp()
{
Stream ftpStream = Retr(...);
return ftpStream;
}
}
, 나는 미래의 요청이 원격 FTP 다시 모든 길을 갈 필요가 없도록, 로컬 캐시로 스트리밍 할 - 나는 그냥 서비스를 제공 할 수 오프 디스크.
반환하기 전에 전체 100MB 파일 스트림을 메모리에 버퍼링하지 않으면이 문제가 발생합니다.
나는 각각의 읽기 쓰기를 수행하는 간단한 캡처 스트림 래퍼 사용하여 시도 :public class CapturingStreamWrapper : Stream
{
private readonly Stream stream;
private readonly Stream captureStream;
public override int Read(byte[] buffer, int offset, int count)
{
int readBytes = stream.Read(buffer, offset, count);
captureStream.Write(buffer, offset, readBytes);
return readBytes;
}
}
public class StreamService : IStreamService
{
public Stream GetDataFromFtp()
{
Stream ftpStream = Retr(...);
Stream cacheStream = File.OpenWrite(...);
return new CapturingStreamWrapper(ftpStream, cacheStream);
}
}
을하지만이 작동하지 않았다.
또한 오류 처리 기능이 제공되지 않습니다. 클라이언트 전송에 실패 (예 : 트랜잭션 캐시) 된 경우 절반의 기록 된 파일을 삭제하기위한 캐치 블록이 필요합니다. WCF 라이프 사이클에서 스트림을 호출하거나 정리할 때를 모르기 때문에 이것이 어떻게 작동하는지 잘 모르겠습니다.
클라이언트로 다시 스트리밍 할 때 어떤 파일을 어떻게 스트리밍 할 수 있습니까?
난 당신이'너무 BytesReadEventArgs' 한 않습니다 ..이 스핀을 줄 막했다? 이게 너에게 어떻게 작용하는거야? – LamonteCristo
안녕하세요 리차드 지금은 꽤 오래된 것 같습니다.하지만 WCF 구현에서 스트리밍 전송 모드를 사용하고 있는지 확인하고 싶습니다. – user919426