2012-10-18 3 views
3

대용량 파일을 업로드하려면 WCF 서비스가 필요합니다. 아래 중 하나가 더 최적화 된 성능을 제공WCF를 사용하여 파일 업로드

[OperationContract] 
    public void UploadFile(Stream inputsreaam); 

또는

[OperationContract] 
    public void UploadFile(byte[] buffer); 

는 다른 제안

+1

서비스를받는 클라이언트는 무엇입니까? – ChrisBint

+0

cant can? 고객의 차이점 – Gerry

답변

4

정말로 큰 파일을 업로드하려면 스트림 하나를 사용하십시오. 2 기가 바이트 파일을 byte []로 전송하면 서버의 메모리에로드되며 어딘가에 저장할 수 있습니다. 스트림을 사용하면 클라이언트 스트림에서 읽고 데이터의 작은 덩어리 만 메모리에 실제로 서버의 파일 또는 DB 스트림에 쓸 수 있습니다. 성능으로 돌아 가기 : 정말로 큰 파일과 여러 클라이언트 byte []가 있으면 메모리가 부족하여 서버가 정지 할 수 있습니다.

tutorial이 도움이 될 수 있습니다.

2

일반적으로, 첫 번째 (Stream 매개 변수) 환영합니다. Stream 매개 변수를 사용 중이고 WebHttpBinding/WebHttpBehavior (즉, 웹 또는 REST 끝점)가있는 끝점을 사용하는 경우 스트림 매개 변수는 인코딩없이 전체 요청 본문에 바인딩됩니다. 이 경우 두 번째 파일 (byte[])을 사용하는 경우 형식에 따라 매개 변수를 배열로 인코딩해야합니다 (XML의 경우 base64로 인코딩 된 바이트, JSON의 경우 바이트를 나타내는 숫자의 실제 배열).

웹 엔드 포인트를 사용하지 않는 경우 (즉, SOAP 엔드 포인트를 사용하는 경우), 스트림 또는 byte [] 매개 변수가 SOAP 인 에 바인드되므로 상당히 유사합니다 body이고 SOAP 메시지가 이미 인코딩되어 있습니다.

관련 문제