2009-06-24 9 views
3

웹 서비스를 사용하여 데이터를 동기화하는 클라이언트 - 서버 (C#) 응용 프로그램을 구축하고 있습니다.많은 양의 데이터를 웹 서비스에 전달하는 방법

기본적으로 DataSet의 XML을 앞뒤로 전달합니다. 그러나 다양한 매개 변수에 따라 데이터 세트는 실제로 상당히 클 수 있습니다. 나는 Gzip을 사용하여 XML을 압축하고이를 웹 서버에 전달하고 압축 된 XML 결과를 다시 얻고 싶습니다.

잠재적으로 큰 데이터 덩어리를 앞뒤로 전달하는 가장 좋은 방법은 무엇입니까?

설명 : 데이터를 전달하는 데 가장 적합한 형식을 묻는 것 같습니다. JSON, SOAP, 일반 POST (필자는 웹 서비스에 익숙하지 않아서 생각하지 못하는 것이 많다.)

+0

@ Jared : 이해할 수없는 포인트 솔루션을 얻는 대신 웹 서비스에 익숙해 질 가능성을 고려하십시오. –

답변

4

가장 좋은 요인은 무엇일까요? 최고의하여 가장 성능이 좋은 의미, 여기 고려해야 할 몇 가지 사항은 다음과 같습니다

  • XML 모든
  • 바이너리 직렬화에서 가장 좋은 방법은 아닙니다 훨씬 더 효율적입니다.
  • 그러나 상호 운용성에 신경을 써야하는 경우이 옵션을 사용하지 못할 수도 있습니다. 이 경우 플랫 파일이나 구분 된 형식을 사용하는 것이 좋습니다.
  • 둘 다 실행할 수없는 경우 모든 데이터 대신 변경된 내용 만 보낼 수도 있습니다.
  • 이것이 옵션이 아닌 경우 XML 압축은 ... 확인 솔루션입니다.

XML에 불필요한 메타 데이터가 많이 포함되어있어 페이로드 크기를 5 배 이상으로 쉽게 늘릴 수 있으므로 마지막 수단으로 XML을 사용합니다.

+0

저는 압축에 대해 정말로 좋은 해결책이되는 것에 동의하지 않습니다. 요즘에는 대역폭이 더 이상 병목 현상이 아니며 서비스 측면의 부하가 훨씬 더 중요합니다. 페이로드를 압축하면 덜 필요한 대역폭에서 서비스 측면의 하이어로드까지 트레이드 오프가 발생합니다. – fgysin

+0

XML은 스트림으로 읽을 수 있지만 마지막 바이트가 수신 될 때까지 유효한지 여부는 확인할 수 없습니다. 또한 XML 페이로드의 상당 부분은 데이터가 아닌 서식을 지정하는 것입니다. 이러한 컴퓨터 간 통신에 XML 요소가 필요하지 않은 경우 (대체로 그렇지 않은 경우) 대체 (비표준) 플랫 또는 구분 된 형식으로 작업이 향상됩니다. –

1

. 이렇게하면 청크 방식으로 이진 SOAP을 보낼 수 있습니다. 이는 AJAX UI와 결합 된 데이터 청취가 업로드하는 사용자에게 진행률 표시 줄을 제공 할 수 있기 때문에 멋지다.

Here은 MTOM을 사용하여 데이터를 청크 방식으로 보내고받는 예제입니다. 이게 도움이 되길 바란다.

0

파일을 압축하여 webservice를 통해 바이너리로 전송할 수 있습니다. 또한 업로드 한도를 수정하는 것을 잊지 마십시오. http://support.microsoft.com/kb/318425

0

웹 서비스의 경우 고려할 수있는 여러 가지 개념과 가능성이 있습니다.

동일한 데이터 세트를 관리하는 여러 클라이언트가 필요합니까? 동시에?

양쪽에서 관리되는 연결이 끊어 졌거나 다른보기/저장소/보고서를 관리하는 곳이 하나만 있습니까?

데이터 집합에 대한 인터페이스로 클라이언트를 사용하기 만하면 다른 UI (웹)를 사용하여 데이터 집합의 다른 부분을 웹 UI 기반 응용 프로그램으로 독립적으로 관리하는 것이 합리적일까요? ?

트랜잭션 유형 상호 작용을 점진적으로 변경하고 있습니까? (한쪽 끝은 큰 데이터 집합을 클라이언트에 보내고 트랜잭션 변경 내용은 그걸 기반으로 반환됩니다.)

자세한 최적의 관리 또는 자세한 내용은 .

대용량 데이터 엔티티를 보내야하는 경우 파이프 라인에 사용하려는 방법과 간단하게 업로드/다운로드하고 엔드 포인트를 적절히 관리해야합니다. 어떤 임의의 생각을 들어

:

는 DOM에서 데이터를 조작 할 경우

, 자바 스크립트와 매우 호환 JSON을 고려.

XML 데이터 집합 조작이 필요한 경우 전체 데이터 집합을 전달해야하는 경우 zip 또는 기타 압축을 배치 할 수 있습니다. 각 데이터 집합을 연결하면됩니다.

관련 문제