MTOM은 어떻게 작동합니까?
MTOM은 W3C 메시지 전송 최적화 메커니즘으로, 웹 서비스와 이진 데이터를 효율적으로 전송하는 방법입니다.
일반적으로 어떻게 작동합니까?
비 MTOM 사용 서비스 에 Wireshark (또는 System.Net 로깅 사용 )를 배치하면 BASE64로 인코딩 된 이진 데이터가있는 SOAP 요청이 표시되어야합니다. BASE64로 보내면 이진 데이터의 크기가 증가하지만 (내가 가정) 더 상호 운용이 가능합니다.
MTOM을 사용하면 SOAP 메시지가 BASE64 인코딩이 자리 표시 자로 대체 된 MIME 메시지로 전송됩니다. 그런 다음 이진 데이터는 구분 기호 (이진 데이터의 각 부분에 대해 발생) 사이에 배치 된 다음 SOAP 요청의 끝에 배치됩니다. 바이너리 데이터는 인코딩되지 않은 상태로 전송됩니다. IIRC, MTOM은 또한 그것을 MIME 메시지로 보낼 때 SOAP 호출의 크기를 증가 시킬지 여부를 결정하고 저장을 제공하지 않으면 일반 SOAP 메시지로 보냅니다.
이것은 유선을 통해 전송 된 메시지의 예를 제공합니다.
모든 것은 SOAP가 XML 이라는 사실에서 시작됩니다 . 예를 들어 이미지와 같이 텍스트 이외의 것을 보낼 때 XML 프로세서가 이해할 수있는 데이터 유형으로 변환해야합니다.
MTOM이 없으면 이미지가 base64Binary 로 변환되고 SOAP 봉투의 중간에 배치됩니다. 이 변환 프로세스는 데이터를 풍부하게 만듭니다.
<tns : data> 아주 looooooooooooooooooooooong base64Binary 문자열 </ tns : data>
다음은 간단한 그림입니다.

MTOM을 사용하면 이미지가 MIME 첨부 파일 로 봉투 외부 로 전송 됩니다. 즉, 원래 데이터 유형 인 jpg, png 또는 gif에 따라 전송됩니다. 물론 여전히 이진 데이터로 전송되지만 이번에는 XML 관련 변환이 없으므로 계산 오버 헤드를 피할 수 있습니다. XOP는 외부화 된 이미지의 위치를 제공하는 것이므로 그림에 등장합니다.
<soap:Envelope>
<soap:Body>
<tns:data>
<xop:include href="SomeUniqueID-ThatLeadsToTheImage"/>
</tns:data>
</soap:Body>
</soap:Envelope>
콘텐츠 ID : "SomeUniqueID"
콘텐츠 유형 : image / png여기에 이미지 바이너리 데이터
다른 답변에서 언급하지 않은 몇 가지 요소가 있습니다. MTOM이 텍스트 메시지 인코딩 (Base64)보다 "빠르기" 때문에 MTOM이 기본값으로 사용되지 않는 이유를 생각할 수 있습니다 . MTOM이 항상 빠르지 않기 때문입니다. MTOM은 오버 헤드가 발생하므로 대용량 메시지 전송에만 사용해야합니다. 작은 크기의 메시지의 경우 MTOM의 성능이 텍스트 메시지 인코딩 (Base64)보다 떨어집니다.
MTOM이 대용량 메시지에 사용되는 경우 데이터 전송에 원시 바이너리를 사용하므로 Base64보다 빠릅니다. 이를 이해하려면 Base64의 작동 방식을 이해해야합니다.
Base64는 6 비트 (log2 (64)) 를 사용하여 1 개의 문자 를 나타냅니다. 즉, base64는 4 개의 문자 를 사용 하여 24 비트 ( 3 바이트 ) 를 나타냅니다 . 따라서 메시지 크기가 n bytes 이면 base64는 4 * (n / 3) 바이트 를 사용하여 데이터를 나타내 므로 MTOM보다 1/3 이 느려집니다 .
참고 URL : https://stackoverflow.com/questions/215741/how-does-mtom-work
'program story' 카테고리의 다른 글
| manage.py runserver (0) | 2020.11.20 |
|---|---|
| Windows의 Anaconda Python에 Keras와 Theano를 어떻게 설치합니까? (0) | 2020.11.19 |
| postDelayed에 의해 추가 된 핸들러 객체에서 실행 파일을 제거하는 방법은 무엇입니까? (0) | 2020.11.19 |
| 백그라운드 스레드에서 NSTimer를 어떻게 생성합니까? (0) | 2020.11.19 |
| AngularJS에서 루트 스코프에 브로드 캐스트 이벤트를 등록 해제하려면 어떻게해야합니까? (0) | 2020.11.19 |