2011-01-04 3 views
3

파일을 다운로드하기 위해 업데이터 서비스와 통신하는 클라이언트 응용 프로그램이 있습니다. 업데이터 서비스는 데이터베이스에서 가져온 다음 WCF를 사용하여 클라이언트에 보냅니다. 지금은 보안을 활용할 수 있도록 WSHttpBinding을 사용하고 있습니다. 그래서 내가 다운로드/전송 한 가장 큰 파일은 약 8 MB이며 이것은 정상적으로 작동합니다. 나는 최근에 약 130 MB였던 파일로 시도했지만 클라이언트에서는 아무 것도 일어나지 않았다. 네트워크 사용량이 0 %에 불과했습니다.스트리밍을 사용하기 전에 WCF에서 몇 바이트를 전송 했습니까?

파일이 너무 커서 스트리밍없이 전송할 수 없다고 가정합니다 (maxReceivedMessageSize 등은 209715200과 동일하므로 설정이 올바른 것으로 알고 있음). 이 문제를 해결하려면 특정 크기보다 큰 파일을 스트리밍 할 수 있도록 서비스에서 BasicHttpBinding을 사용하도록하고 싶습니다.

제 질문은 WSHttpBinding에서 BasicHttpBinding 및 스트리밍으로 전환해야하는 파일 크기입니다. 사람이 따라야 할 표준이 있습니까? 또는 내 논리가 완전히 잘못 되었습니까?

답변

2

평상시처럼 은 상황에 따라에 달려 있습니다.

이 고려 :

  • 일반적으로 (당신의 제한 설정에 따라) 동시에 여러 발신자 서비스를 제공 할 수 서비스 - 이러한 발신자의 각각에 원한다면 지금

  • 10 또는 20 동시 발신자를 가정 파일을 다운로드하면 스트리밍을 사용하지 않는 경우 전체 파일을 WCF 서비스의 메모리에 버퍼해야합니다.

So 20 명의 발신자가 동시에 100MB 파일을 다운로드하려고하면 서버 측 컴퓨터에서 2GB RAM을 한 번에 사용할 수 있어야합니다. 서버가 다른 모든 일반적인 프로세스가 실행되는 것 외에 다른 프로세스를 처리 할 수 ​​있습니까?

이 간단한 계산을 사용하면 스트리밍으로 전환하는 것이 적합한 크기 제한에 대한 적절한 추측을 할 수 있습니다.

+1

그래도 서비스가 모든 발신자에 대해 내 SQL 데이터베이스에서 파일을 가져 오는 중이므로 스트리밍을하더라도 여전히 각 발신자 (20 명의 발신자 = 여전히 2GM RAM)의 전체 100MB 파일이 필요하지 않습니까? WCF 서비스를 메모리에서 전체 파일을 실제로 필요로하지 않고 데이터베이스에서 클라이언트로 "브리지"로 사용할 수있는 방법이 있습니까? 아니면 어떻게 든 모든 사본을 수신 할 때까지 메모리에 사본 한 부를 가져 와서 보관할 수 있습니까? – Marcus

1

marc_s가 말한 것처럼 사이트 활동과 사용 가능한 메모리에 따라 다릅니다.

일반적으로 평균 크기가 약 1Mb에 도달하기 시작하면 스트리밍을 고려하기 시작합니다. 5Mb는 내 "필수 스트림"제한입니다.

관련 문제