대용량 파일을 업로드하려면 WCF Streaming Mode을 조사해야합니다.
기본적으로 바인딩에서 전송 모드를 변경할 수 있습니다. 기본적으로 메시지는 버퍼링됩니다. 즉, 전체 메시지를 발신자에서 버퍼링하고 일련 화 한 다음 전체적으로 전송해야합니다.
스트리밍을 사용하면 단방향 스트리밍 (다운로드 전용, 다운로드 전용) 또는 양방향 스트리밍 중 하나를 정의 할 수 있습니다. 바인딩의 transferMode를 StreamedRequest
, StreamedResponse
또는 보통 Streamed
으로 설정하면됩니다.
<bindings>
<basicHttpBinding>
<binding name="HttpStreaming"
maxReceivedMessageSize="2000000"
transferMode="StreamedRequest"/>
</basicHttpBinding>
</bindings>
그런 다음 당신도 (업로드) 유형 Stream
의 매개 변수를 수신, 또는 (다운로드) 유형 Stream
의 값을 반환하는 서비스 계약이 필요합니다.
[ServiceContract]
public interface IFileUpload
{
[OperationContract]
bool UploadFile(Stream stream);
}
그렇게해야합니다!
요청/응답이 특정 스키마를 따라야하는 경우 어떻게해야합니까? 즉, 요청이 특정 객체 여야 만하고 wsdl이이를 반영해야한다면? 스트림으로 어떻게이를 적용 할 수 있습니까? – Jeremy
@ 제레미 : 제 응답은 다음과 같이 말합니다 : 스트리밍 전송을 사용하려는 경우 ** 오직 하나의 매개 변수 'Stream' (또는'Stream '유형의 반환 값)만을 사용할 수 있습니다. 이와 같이 서비스를 설계 할 수없고 다른 특정 요구 사항을 따라야하는 경우 불행히도 스트리밍 전송을 사용할 수 없습니다. 이 일을 할 수있는 마법 같은 방법은 없습니다. –
@marc_s 단일 대형 문자열 매개 변수는 어떻습니까? [내 최근 질문] (https://stackoverflow.com/questions/48774474/parameter-size-limit-for-strings#comment84577011_48774474)이 중복으로 표시되었지만 적절한 매개 변수를 쉽게 설정할 수 있습니다. 1.2GB의'byte []'매개 변수 유형을 'byte []'에서'string'으로 변경하면 약 28mb로 제한됩니다. 필자는'string'을 매개 변수로 가져야합니다. – Franck