질문하는 방법을 잘 모르겠지만 정교하게하기 위해 ASP.Net 웹 API 2 프로젝트에서 AWS SDK를 사용하고 있으며 S3 객체에 대한 응답 스트림을 반환하려고합니다. 스트림이 클라이언트에게 전달 된 다음 처리됩니다.하위 속성을 캡처 한 경우 상위 개체가 범위를 벗어납니다. 하위 속성을 언제 처리합니까?
내가 확신 할 수없는 사실은 S3에 대한 내 참조가 AWS와 종속 관계를 분리하기 위해 객체로 추상화된다는 것입니다. 내 파일 저장소 내에서 ResponseStream
속성을 포함하는 S3Response
개체를 검색합니다. S3Response
개체가 처리되면 그 밑에는 ResponseStream
이 처리됩니다. IFileStore
은 Stream
만 반환하며, 그 다음 패키지로 작성하여 StreamContent
으로 API에서 반환합니다.
내가 FileStore.GetFile(...)
전화를 감안할 때 그리고 그것은 ResponseStream
속성 값을 반환하고 ResponseStream
는 범위를 벗어나, 내가 Dispose
잠재적 전에 정상 GC 동작하는 동안 부모에 의해 ResponseStream
객체에서 호출 될 것이라는 의심을 HTTP 응답이 완료되었습니다.
S3을 추상화 된 상태로 유지하고 HTTP 응답이 완료되면 응답 스트림 만 처리되도록하려면 어떻게해야합니까?
내가 할 수있는 한 가지 방법은 을 기본 스트림의 프록시로 구현하는 일반 컨테이너 객체에 전체 S3 응답 객체를 패키징하여 내 API 메소드에서 StreamContent
을 반환 한 다음 Dispose
메소드는 프레임 워크가 자연스럽게 프로세스의 끝에서 Dispose를 호출 할 때 전체 S3 응답 객체를 처리합니다. 비록 그것을 할 더 좋은 방법이 있는지 확실하지 않습니다.
나는 이것을 위해'PushStreamContent'를 사용해야한다고 생각합니다 : http://weblogs.asp.net/andresv/asynchronous-streaming-in-asp-net-webapi – Noseratio
네, 고마워요! @Noseratio이 답변을 추가하여 올바른 것으로 표시 할 수 있습니다. –