2011-08-22 5 views
2

현재 NetTCP 바인딩을 통해 클라이언트와 통신하는 .Net 3.5의 여러 WCF 서비스가 있습니다. 클라이언트와 서버 간의 데이터 트래픽을 줄이기 위해 WsHTTP 바인딩을 NetTCP로 전환했습니다 (NetTCP har 바이너리 인코딩 전송).WCF의 이진 직렬화 NetTCPBinding

우리는 결과에 만족하지 않고 (테스트에서 30 % 만 줄였습니다.) 개체의 기본 xml serialization 대신 이진 serializer를 사용하려고합니다.

이렇게하면 페이로드가 훨씬 줄어 듭니까? WCF에서 이진 직렬화를 구현하려면 어떻게해야합니까? 입력 된 데이터 집합을 전송할 객체로 사용합니다.

답변

4

데이터 집합이 아닌 서비스의 데이터 계약에 일반 객체를 사용하는 것을 진지하게 고려해야합니다. 강력하게 형식화 된 Dataset 객체는 매우 복잡 할 수 있으며 (뒤에서 코드를 살펴보십시오) 모든 직렬화는 크기가 상당히 커집니다. NetTcpBinding은 이미 작은 페이로드를 생성해야하는 바이너리 시리얼 라이저를 사용합니다. 쿼리 가능/유연한 서비스 계층을 만들려는 경우 대체 방법으로 resource-based service architecture을 사용하십시오.

netTcpBinding에 대한 Microsoft의 이진 인코더를 향상시킬 수 있다고 생각되면이 MSDN post에서 참조되는 샘플 코드를 살펴보십시오.

+1

안녕하세요. 감사합니다. 프로젝트는 강력한 형식의 데이터 집합을 사용하여 완전히 잠겨 있으므로 옵션이 아닙니다. NetTCPBinding이 바이너리 시리얼 라이저를 사용하고 있습니까? 직렬화 된 객체가 이진 인코딩으로 전송된다는 것을 알고 있지만 객체가 일반적으로 직렬화되었다고 생각합니다 (XML)? – Martin

+0

지금은 확인할 시간이 없지만 netTcpBinding은 ** 이진 ** XML 직렬화 형식을 사용합니다 (이 MSDN 게시물에 설명되어 있습니다.) (http://msdn.microsoft.com/en-us) /library/cc219210(v=PROT.10).aspx) 자신의 직렬화 형식을 롤링하려는 경우 해당 문서를 확실히 검토하십시오. 이 [MSDN 블로그 게시물] (http://blogs.msdn.com/b/carlosfigueira/archive/2011/03/29/wcf-extensibility-icontractbehavior.aspx)을 통해 해당 경로를 시작할 수 있습니다. 행운을 빈다 !! –