2008-10-18 25 views
51

एमटीओएम डब्ल्यू 3 सी संदेश ट्रांसमिशन ऑप्टिमाइज़ेशन मैकेनिज्म है, वेब सेवाओं से और उससे कुशलता से बाइनरी डेटा भेजने की एक विधि है।एमटीओएम कैसे काम करता है?

यह सामान्य रूप से कैसे काम करता है?

उत्तर

42

यदि आप गैर-एमटीओएम सक्षम सेवा पर Wireshark (या सक्षम System.Net Logging) डालते हैं, तो आपको BASE64 के रूप में एन्कोड किए गए बाइनरी डेटा के साथ SOAP अनुरोध देखना चाहिए। इसे BASE64 के रूप में भेजना बाइनरी डेटा का आकार बढ़ाता है लेकिन (मुझे लगता है) इसे अधिक अंतःक्रियाशील बनाता है।

एमटीओएम के साथ, एसओएपी संदेशों को एमएआईएम संदेशों के रूप में भेजा जाता है जिसमें BASE64 एन्कोडिंग प्लेसहोल्डर के साथ प्रतिस्थापित किया जाता है। बाइनरी डेटा तब डिलीमीटर (जो बाइनरी डेटा के प्रत्येक टुकड़े के लिए होता है) के बीच रखा जाता है, और उसके बाद एसओएपी अनुरोध के अंत में रखा जाता है। फिर बाइनरी डेटा को बिना सेंकोड भेजा जाता है। आईआईआरसी, एमटीओएम यह भी निर्धारित करता है कि इसे एमआईएमई संदेश के रूप में भेजना एसओएपी कॉल के आकार में वृद्धि करेगा और यदि बचत नहीं प्रदान करता है, तो यह इसे सामान्य एसओएपी संदेश के रूप में भेज देगा।

This तार का संदेश कैसा दिखता है इसका एक उदाहरण प्रदान करता है।

+5

"बाइनरी डेटा तब डिलीमीटर के बीच रखा जाता है" वैकल्पिक रूप से, बाइनरी डेटा के लिंक को एसओएपी संदेश के हिस्से के रूप में भेजा जा सकता है ताकि बाइनरी डेटा एक्सएमएल के बाहर मौजूद हो और डाउनलोड किया जा सके, उदाहरण के लिए, प्रदर्शन के लिए HTTP/एस सर्वर के क्लस्टर। इसे "संदर्भ द्वारा" कहा जाता है – Eric

118

यह सब इस तथ्य से शुरू होता है कि SOAP XML है। और जब आप पाठ के अलावा कुछ भी भेजते हैं, उदाहरण के लिए, एक छवि - इसे एक डेटाटाइप में परिवर्तित किया जाना चाहिए जो एक एक्सएमएल प्रोसेसर समझ सकता है।

एमटीओएम के बिना, आपकी छवि बेस 64 बाइनरी में परिवर्तित हो जाएगी और आपके एसओएपी लिफाफे के बीच में स्मैक रखी जाएगी। यह रूपांतरण प्रक्रिया डेटा वसा बनाती है।

< टीएनएस: डेटा> एक बहुत looooooooooooooooooooooong base64Binary स्ट्रिंग </टीएनएस: डेटा>

यहाँ एक सरल उदाहरण दिया गया है:

enter image description here

MTOM साथ

, छवि प्रसारित किया जाएगा के बाहर लिफ़ाफ़ा एमआईएम संलग्नक - sh में ओआरटी, इसे अपने मूल डेटाटाइप के अनुसार भेजा गया है: एक जेपीजी, पीएनजी, या जीआईएफ। बेशक यह अभी भी बाइनरी डेटा के रूप में प्रेषित है, लेकिन इस बार, कम्प्यूटेशनल ओवरहेड से परहेज करते हुए कोई एक्सएमएल से संबंधित रूपांतरण नहीं है। एक्सओपी तस्वीर में आता है क्योंकि यह वह है जो बाहरी छवि का स्थान देता है।

<soap:Envelope> 
    <soap:Body> 
     <tns:data> 
      <xop:include href="SomeUniqueID-ThatLeadsToTheImage"/> 
     </tns:data> 
    </soap:Body> 
</soap:Envelope> 

सामग्री आईडी: "SomeUniqueID"
सामग्री प्रकार: image/png

छवि बाइनरी डेटा यहां

+0

क्या आपके पास इसका कोई नमूना कोड है, वास्तव में मुझे यह समझने की आवश्यकता है कि में क्या शामिल करना है। मैं किसी भी तरह उलझन में हूँ। –

+0

यह एक बहुत अच्छा स्पष्टीकरण है, धन्यवाद – Tarik

+4

बहुत अच्छा चित्रण। केला प्रतीक भी मजेदार और मनोरंजक है। पूरी तरह से चट्टानों Mtom। –

7

कुछ कारकों रहे हैं कि अन्य उत्तर डॉन उल्लेख नहीं है। कोई सोच सकता है कि एमटीओएम का उपयोग डिफ़ॉल्ट रूप से क्यों नहीं किया जाता है क्योंकि यह टेक्स्ट संदेश एन्कोडिंग (बेस 64) से "तेज" है। ऐसा इसलिए है क्योंकि एमटीओएम हमेशा तेज नहीं होता है। एमटीओएम का उपयोग केवल बड़े संदेश स्थानान्तरण पर किया जाना चाहिए क्योंकि यह ओवरहेड के साथ आता है। संदेशों के छोटे आकार के लिए, एमटीओएम का प्रदर्शन टेक्स्ट मैसेज एन्कोडिंग (बेस 64) से भी बदतर होगा।

यदि एमटीओएम बड़े संदेशों के लिए उपयोग किया जाता है, तो यह बेस 64 से तेज है क्योंकि यह डेटा हस्तांतरण के लिए कच्चे बाइनरी का उपयोग करता है। यह समझने के लिए, किसी को समझना चाहिए कि बेस 64 कैसे काम करता है।

Base64 6 बिट्स (log2 (64)) का उपयोग करता 1 चरित्र जिसका अर्थ है कि बेस 64 4 अक्षर का उपयोग करता है 24 बिट (3 बाइट्स) का प्रतिनिधित्व करने का प्रतिनिधित्व करने के। तो यदि संदेश का आकार एन बाइट्स है, तो बेस 64 4 * (एन/3) बाइट्स का उपयोग आपके डेटा का प्रतिनिधित्व करने के लिए करेगा जिसका अर्थ है कि यह एमटीओएम की तुलना में 1/3 धीमा होगा।

संबंधित मुद्दे