2009-10-08 8 views
5

मुझे यहां एक समस्या का सामना करना पड़ रहा है। मैं एक क्लाइंट/सर्वर प्रोजेक्ट कर रहा हूं, जो डेटा प्राप्त करने के लिए डब्ल्यूसीएफ वेब सेवा कॉलिंग कर रहा है। ट्रांसफरिंग के विशाल डेटा के कारण, मुझे अपने बाइंडिंग को प्रोग्रामिंग (कस्टम कॉन्फ़िगरेशन द्वारा नहीं) पर बाध्यकारी बदलना है।WSHttp बाइंडिंग सुरक्षा और GZip संपीड़न करके कस्टम बाध्यकारी कैसे बनाएं?

मैं हूं बाध्यकारी उर्फ ​​कस्टम बाध्यकारी एक नया उपयोगकर्ता परिभाषित करना। वर्ग के उदाहरण है:

public class MyCustomBinding : CustomBinding  

और एक समारोह BindingElementCollection ओवरराइड:

public override BindingElementCollection CreateBindingElements() 
{ 
    WSHttpBinding wSHttpBinding = new WSHttpBinding("RMSKeberosBinding"); //this is to load the configuration from app.config. because i want to copy the setting of wsHttpConfig to my custom binding. 

    BindingElementCollection wSHttpBindingElementCollection = wSHttpBinding.CreateBindingElements(); 

    TransactionFlowBindingElement transactionFlowBindingElement = wSHttpBindingElementCollection.Remove<TransactionFlowBindingElement>(); 
    SymmetricSecurityBindingElement securityElement = wSHttpBindingElementCollection.Remove<SymmetricSecurityBindingElement>(); 
    MessageEncodingBindingElement textElement = wSHttpBindingElementCollection.Remove<MessageEncodingBindingElement>(); 
    HttpTransportBindingElement transportElement = wSHttpBindingElementCollection.Remove<HttpTransportBindingElement>(); 

    GZipMessageEncodingBindingElement gzipElement = new GZipMessageEncodingBindingElement(); // this is from microsoft sample. i want to add gzip as a compress to my message. 

    BindingElementCollection newCol = new BindingElementCollection(); 
    newCol.Add(transactionFlowBindingElement); 
    newCol.Add(securityElement); 
    newCol.Add(gzipElement); 
    newCo .Add(transElement); 
    return newCol; 
} 

मुझे क्या करना कोशिश कर रहा हूँ सब wshttpbinding से स्थापित करने की प्रतिलिपि, और संदेश एनकोडर के रूप में gzip पर जोड़ने है। एन्क्रिप्टेड डेटा को संपीड़ित करने से मूल डेटा आकार का एक बड़ा आकार होगा। ऐसा इसलिए है क्योंकि WSHttp बाइंडिंग से सममित सुरक्षा सुरक्षा बाध्यकारी ने एन्क्रिप्शन किया था। इसे सही तरीके से कैसे करें? मैं wshttpbinding से सुरक्षा सेटिंग, और काम करने के लिए gzip भी चाहते हैं।

उत्तर

0

तुम सिर्फ एक व्यवहार का उपयोग करने के संपीड़न तदनुसार लागू करने के लिए सक्षम होना चाहिए:

http://weblogs.asp.net/cibrax/archive/2006/03/29/441398.aspx

संपादित करें:

http://weblogs.shockbyte.com.ar/rodolfof/archive/2006/04/06/5632.aspx

+0

: मैं शायद यह भी व्यवहार आधारित संपीड़न के लिए लिंक शामिल करना चाहिए हाय, उत्तर के लिए धन्यवाद। मैंने आपके द्वारा पहले दिए गए लिंक को देखा था। क्षमा करें, लेकिन मैं नहीं देख सकता कि WSHttp बाइंडिंग की सुरक्षा के समान व्यवहार का उपयोग करने वाला स्थान कहां है? क्या आपके द्वारा दिया गया लिंक, एन्क्रिप्शन शामिल है? –

+0

मेरे द्वारा लिंक किए गए कोड का उपयोग करके मेरे अनुभव से, भले ही संपूर्ण एन्क्रिप्टेड संदेश स्वयं संकुचित हो, फिर भी यह एक बड़ा संदेश आकार नहीं ले पाया, बल्कि इसके बजाय संदेश का आकार कम कर दिया। संदेश इसके मूल पर है बस SOAP (यानी वर्बोज़ टेक्स्ट), इसलिए संपीड़न का उपयोग करके आपको लाभ देखना चाहिए। क्या मैं गलत समझ रहा हूं कि आप क्या करना चाहते हैं? – Kwal

+0

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