WCF - net.tcp 바인딩과 함께 WS-Compression을 사용하여 소켓 연결이 닫히지 않음

StackOverflow https://stackoverflow.com/questions/1476232

문제

최근에 저는 WCF 앱 작업을 하고 있는데 SOAP 메시지 본문을 압축하여 서비스의 응답 크기를 줄여야 하는 몇 가지 기능이 필요합니다.

몇 가지 조사 끝에 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 바인딩에서 모든 것이 괜찮아 보이는 경우입니다.

누구든지 해당 솔루션을 시도하고 이전에 동일한 문제를 본 적이 있습니까?연결을 강제로 종료하기 위해 할 수 있는 다른 방법이 있나요?제가 놓친 게 있을까요?

많은 감사합니다, Tony

도움이 되었습니까?

해결책

Microsoft는 이제 Compression Encoder에 대한 공식 기사를 갖고 있는 것 같습니다.http://msdn.microsoft.com/en-us/library/ms751458(v=VS.90).aspx

다시 테스트해 보니 문제가 사라진 것 같습니다.며칠이 지난 후에 단위 테스트를 실행하는 것은 그리 쉬운 일이 아닙니다. :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top