2009-09-25 4 views
3

최근 WCF 앱에서 작업 중이며 SOAP 메시지 본문을 압축하기 위해 일부 기능이 필요하므로 서비스의 응답 크기를 유지해야합니다. 줄인.WCF - 소켓 연결이 net.tcp 바인딩을 사용하여 WS-Compression을 사용하여 닫히지 않았습니다.

은 몇 가지 조사 후, 나는, http://weblogs.asp.net/cibrax/archive/2006/03/29/WS_2D00_Compression-for-WCF.aspx> 'http://weblogs.asp.net/cibrax/archive/2006/03/29/WS_2D00_Compression-for-WCF.aspx에서 온라인으로 사용할 수있는 구현을 발견 그것의 저자 채널 관련 클래스와 연관된 새로운 바인딩 요소 'CompressionBindingElement'를 만들었습니다.

이 압축 솔루션은 내 WCF 응용 프로그램에서 완벽하게 작동하며 응답 크기가 거의 90 % 감소했습니다. 나는 첫째로 HTTP 바인딩 (HTTP 전송을 사용하는 사용자 정의 바인딩을 의미)을 통해이를 테스트했으며 모든 것이 잘된 것처럼 보였다.

일단 net.tcp 바인딩 (tcp 전송을 사용하는 맞춤 바인딩)을 통해 시도했지만 앱은 여전히 ​​잘 작동했습니다. 그러나 일부 추적 도구로 검사했을 때 이상한 것을 발견했습니다.

나는 ChannelFactory로 클라이언트를 생성하고 압축 바인딩 요소를 포함한 모든 바인딩 요소를 명시 적으로 추가하는 방법으로 10 번 호출하여 단위 테스트를 수행했습니다. 처음 TcpTrace에서 응답을 확인했을 때이 모든 10 개의 메시지가 단일 요청으로 결합 된 것을 보니 놀랐습니다.

그래서 요청을 확인하기 위해 SvcTraceViewer를 시도했으며 서비스가 종료 될 때까지 소켓 연결이 계속 열려 있음을 발견했습니다. 처리 진행 상황을 살펴보고 모든 메시지를 믿었지만 각 요청마다 채널이 폐쇄되었지만 연결이 닫히지 않았습니다.

압축 바인딩 요소가있는 net tcp 바인딩에서만 문제가 발생했습니다. 요소가 바인딩에 추가되지 않았거나 HTTP 바인딩에서 문제가없는 것으로 보입니다.

누구나 그 해결책을 시도해 본적이 있습니까? 연결을 강제 종료 할 수있는 다른 방법이 있습니까? 나는 무엇이든 놓칠 수 있었습니까?

많은 감사, 토니

답변

관련 문제