2009-12-12 3 views
1

바이트 배열을 클라이언트에 보내는 wcf 작업이 있습니다.maxBufferSize 값이 WCF의 응답 메시지 크기보다 작은 경우에도 예외가 throw되지 않습니다.

보내려는 바이트 배열의 최대 크기는 2MB입니다. 그래서 maxbuffersize와 maxreceivedmessagesize를 basichttpbinding에서 transfermode = 2075152 (2 MB)로 설정했습니다. 서버에서 버퍼링되었습니다.

17MB 파일을 전송하면 이러한 설정이 적용되지만 버퍼 오버플로 예외가 발생하지 않습니다.

감사합니다.

답변

1

UPDATE : WCF에서 버퍼링과 다양한 값의 효과
나의 이해는 잘못됐다. 이 MSDN thread과이 related blog post을 WCF 버퍼 관리 기능에 대해 확인하십시오.

그러나 서버의 버퍼를 제한하는 방법에 대한 확실한 답을 찾을 수 없습니다. 서버 측에서 maxBufferPoolSize (모든 버퍼의 풀에 대한 합계) 및 maxBufferSize (단일 버퍼의 최대 크기)을 제한하면 이해하려는 바를 달성 할 수 있어야합니다.

따라서 서버에서는 서버의 경우 maxBufferSize을 2MB로 설정하고 maxBufferPoolSize을 2MB 이상으로 설정해야합니다. 클라이언트에서 maxReceivedMessageSize도 2MB로 설정하십시오.

+0

17MB 파일을 클라이언트에 보낼 때 작동합니다. 클라이언트의 maxreceivedmessagesize 및 maxbuffersize가 2GB로 설정됩니다. 이 값을 클라이언트에서 2MB로 설정하면 클라이언트가 17MB 파일을받을 수 없기 때문에 예외가 발생하지만 큰 메시지를받는 클라이언트를 제한하지 않는 것이 좋습니다. 생각은 서버의 버퍼 크기를 제어하는 ​​것입니다. – kshatriyudu00

+0

내가 읽은 것 - 기본적으로 WCF는 메시지를 버퍼 모드로 처리합니다. 즉, 메시지의 전체 내용은 메시지를 보내기 전이나받은 후에 메모리에 있습니다. 할당 된이 메모리를 어떻게 제어합니까? maxbuffersize 속성으로 제어 할 수 있다고 생각했지만 분명히 그렇지 않습니까? – kshatriyudu00

+0

메시지가 항상 버퍼링 된 모드에서 전체로 어셈블됩니다. 내 의도는 chunkingchannel을 사용할 수있는 청크로 메시지를 보내지 않는 것입니다. 클라이언트에서 2MB를 설정해도 서버 프로세스에서 17MB 파일이 중지되지 않습니다. 서버는 여전히 17MB 파일 (17MB는 meomory에 있음)을 처리하고이를 클라이언트에 보내려고하지만 maxrecievedmessagesize가 2MB로 설정되어 서버가 아닌 클라이언트에서 오류가 발생하기 때문에 클라이언트가받을 수 없습니다. – kshatriyudu00

관련 문제