2010-08-16 2 views
5

WCF 응답을 압축하는 사용자 지정 인코더를 구축 중입니다. 그것은 마이크로 소프트의 WCF 샘플에서 Gzip으로 인코더이 블로그 게시물을 기반으로합니다 : 나는 모든 작업있어인코더 수준에서 WCF 메시지 크기를 결정하는 방법

http://frenk.wordpress.com/2009/12/04/gzip-compression-wcfsilverlight/

,하지만 지금은 응답이 일정 이상의 경우에만 나는 압축을 적용 할 것 크기,하지만 난 실제 메시지의 총 크기를 인코더 수준에서 검색하는 방법을 잘 모르겠습니다.

메시지를 압축할지 여부를 알 수 있도록 EncoderFactory의 WriteMessage (...) 메서드와 DispatchMessageInspector의 BeforeSendReply (...) 메서드에서 메시지 크기를 가져와야합니다. 응답에 "gzip"ContentEncoding 헤더를 추가 할 수 있습니다. 요청은 항상 작고 압축되지 않으므로 걱정할 필요가 없습니다.

도움을 주시면 감사하겠습니다.

존.

답변

0

당신은 당신이 두 단계로 이런 짓을 했을까 생각이 reply.ToString.Length()message.ToString.Length()

+0

답장을 보내 주셔서 감사합니다. 그러나 답장과 메시지 모두 해당 시점의 참조 개체 (사용자 지정 내부 인코더를 사용하고 있습니다)이므로 길이를 얻을 수 없습니다. 객체로 드릴 다운하면 참조 객체 인 실제 내용을 가져올 수 있습니다. 직렬화 된 원시 데이터가 전송되기 전에이를 유지하는 방법을 모르겠습니다. – user250837

2

에 따라 계산하는 시도 할 수 있습니다. 먼저 메시지를 byte[]에 인코딩하는 사용자 정의 MessageEncoder를 작성하십시오. 일단 인코딩 된 바이트 배열을 가지고 있으면 (이것은 어떤 메시지 인코딩 형식이든 ... Xml, Json, binary 등) 바이트 배열 크기를 검사하고 다른 압축 바이트 배열을 만들지 여부를 결정할 수 있습니다. 당신이 유용하게 사용할 수

여러 자원 :