2012-11-29 8 views
21

मेरे पास डब्ल्यूसीएफ वेब सेवा और जावास्क्रिप्ट क्लाइंट है जो एसओएपी 1.2 का उपयोग करके AJAX के माध्यम से इस सेवा से जुड़ता है। मैं क्या करना चाहता हूं कि AJAX SOAP कॉल को पर केवल एक प्रॉक्सी का उपयोग करने के लिए कुछ पैरामीटर पास करना है, जैसा कि मैं इसे "एक नई प्रॉक्सी शुरू करें" अनचेक करके डब्ल्यूसीएफ टेस्ट क्लाइंट में करता हूं। imageएसओएपी का उपयोग करते हुए जावास्क्रिप्ट में एक प्रॉक्सी का उपयोग कैसे करें डब्ल्यूसीएफ टेस्ट क्लाइंट का उपयोग

और ये मेरे सोप AJAX कॉल है:

DoSoapAjax: function (soapMethodName, data, successHandler, errorHandler, isAsync, currentInstance) { 
    var service = this; 
    var soapResult = soapMethodName + "Result"; 
    var soap12WithWsHttpBindRequest ='<s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:s="http://www.w3.org/2003/05/soap-envelope">' + 
         '<s:Header>' + 
         '<a:Action s:mustUnderstand="1">' + this.serviceContractNamespace + '/' + this.interfaceName + '/' + soapMethodName + '</a:Action>' + 
         '<a:MessageID>urn:uuid:605ea0c6-d09b-46bf-b61d-e61b377a135b</a:MessageID>' + 
         '<a:ReplyTo>' + 
         '<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>' + 
         '</a:ReplyTo>' + 
         '<a:To s:mustUnderstand="1">' + this.tenantAdminService + '</a:To>' + 
         '</s:Header>' + 
         '<s:Body>'; 
         if (data == emptyString) 
         { 
         soap12WithWsHttpBindRequest += 
         '<' + soapMethodName + ' xmlns="' + this.serviceContractNamespace + '" />'; 
         } 
         else 
         { 
         soap12WithWsHttpBindRequest += 
         '<' + soapMethodName + ' xmlns="' + this.serviceContractNamespace + '">' + 
         data + 
         '</' + soapMethodName + '>'; 
         } 
         soap12WithWsHttpBindRequest += 
         '</s:Body>' + 
         '</s:Envelope>'; 
    // in order for ajax to work on jQuery 1.8.2 we need to enable the following. 
    // found this answer on the link : http://stackoverflow.com/questions/9160123/no-transport-error-w-jquery-ajax-call-in-ie 
    $.support.cors = true; 
    // variable to save successData 
    var responseData = null; 
    // SOAP 1.2 query 
    var response = $.ajax({ 
       type: "POST", 
       url: this.tenantAdminService, 
       data: soap12WithWsHttpBindRequest, 
       contentType: "application/soap+xml", 
       dataType: "xml", 
       processData: false, 
       async: isAsync, 
       success: function (data, status, xmlHttpRequest) { 
       responseData = data; 
       // inserting all data results into dictionary 
       var responseResults = {}; 
       // delegating success function 
       if (successHandler != null) 
       { 
        responseResults = service.ParseResponse(soapMethodName, data); 
        successHandler(responseResults, currentInstance); 
       }     
       }, 
       error: function (xmlHttpRequest, textStatus, errorThrown) { 
        if (errorHandler != null) 
        { 
        errorHandler(xmlHttpRequest, textStatus, errorThrown, currentInstance); 
        } 
        else if (!isAsync) 
        { 
        alert("Error : " + errorThrown); 
        alert("Error Description : " + xmlHttpRequest.responseText); 
        } 

        return; 
       } 
      }); 

     if (!isAsync) 
     { 
      return service.ParseResponse(soapMethodName, response.responseXML); 
     } 
    } 
+0

क्या यह आपके अपने सर्वर या तृतीय पक्ष SOAP सेवा के लिए है? मैं क्रॉस साइट के मुद्दों के कारण सोच रहा हूं यदि आप क्लाइंट को वास्तव में इस फ़ंक्शन के माध्यम से तृतीय पक्ष SOAP ws पर XML भेजते हैं। मेरा मानना ​​है कि अधिकतर ब्राउज़र आपको अपने मूल वेब पेज से जेएस के माध्यम से सीधे तीसरे पक्ष में एक्सएमएल पोस्ट करने की अनुमति नहीं देंगे। अपनी डब्ल्यूसीएफ स्क्रीन से, मैं इसे आंतरिक लेता हूं। तो ब्राउज़र क्लाइंट के बाद प्रॉक्सी द्वारा आपका क्या मतलब है? – williambq

+0

@ विल्लियाम्बक आपकी टिप्पणी के लिए धन्यवाद। यह मेरा अपना सर्वर है।तीसरी पार्टी नहीं – liorafar

+2

तो, मुझे लगता है कि आप जगह पर सिंगलटन प्रॉक्सी पाने की कोशिश कर रहे हैं? तो प्रत्येक अनुरोध प्रॉक्सी का एक नया उदाहरण बनाता है जब बुलाया जाता है? – williambq

उत्तर

1

मैं कह रहा है कि मैं इस के लिए विशिष्ट उत्तर नहीं पता द्वारा बंद शुरू करेंगे, लेकिन मेरे दृष्टिकोण होगा अपने WFC से यातायात सूंघना टेस्ट क्लाइंट यह देखने के लिए कि क्या यह कॉल में कोई भी पैरामीटर जोड़ रहा है जिसे आप अपने AJAX कॉल पर अपने अनुरोध हेडर में जोड़ सकते हैं।

फिडलर नौकरी कर सकता है हालांकि मुझे यकीन नहीं है कि यह सभी http यातायात को पकड़ लेगा - ज्यादातर यह ब्राउज़र के लिए तैयार है। तार शार्क, ईथर, और इसी तरह के उपयोग के साथ अन्य उपकरण हैं।

मुझे लगता है कि एसओएपी लिफाफा निकाय के बाहर कुछ अन्य अनुरोध पैरामीटर है जो परीक्षण क्लाइंट से प्रेषित किया जा रहा है जिसे आप देख सकते हैं। यह एकमात्र तरीका है जिसे मैं कल्पना कर सकता हूं कि परीक्षण क्लाइंट आपके एसओएपी संदेश को संशोधित किए बिना संवाद करने में सक्षम होगा।

यदि आप नाम और मूल्य पा सकते हैं, तो आप इसे अपने डेटा में जोड़ सकते हैं: पैरामीटर किसी अन्य नाम-मूल्य JSON इकाई के रूप में।

0

लियोराफ़ार: मुझे लगता है कि आप ब्राउज़र से जावास्क्रिप्ट चला रहे हैं क्योंकि यह मेजबान है। यदि ऐसा है तो यह तब तक संभव नहीं है जब तक कि आप जावास्क्रिप्ट को अपने मेजबान के कुछ व्यवहार को बदलने की अनुमति न दें, जो ग्राहकों को सुरक्षा के जोखिम के रूप में पहचानने वाले प्रत्येक निष्कर्ष के लिए ग्राहकों के अनुमोदन के साथ है। इस पर विचार करें: 1) जावास्क्रिप्ट कनेक्शन कॉन्फ़िगरेशन पर नियंत्रण नहीं लेता है, यह केवल मेजबान द्वारा प्रदान किए गए परिवेश का उपयोग करता है जहां यह चल रहा है, इस मामले में ब्राउज़र लेकिन सर्वर पक्ष पर भी हो सकता है। 2) यदि आप कहते हैं, "ठीक है, इसे मजबूर करें", मेरे दिमाग में एकमात्र तरीका यह है कि कनेक्शन को बदलने के लिए अपने मेजबान या क्लाइंट होस्ट और बल के किसी ऑब्जेक्ट का उदाहरण बनाना है ... और उसके द्वारा पल ब्राउज़र आपके जावास्क्रिप्ट को एक सुरक्षा जोखिम के रूप में पहचान लेगा और कर्कश रूप से आपको बाजार में हर ब्राउज़र के लिए एक स्क्रिप्ट बनाना चाहिए, क्योंकि हर किसी के पास इसे संभालने का तरीका है ... इस पर एकमात्र अच्छी खबर यह है कि आईई के साथ आप बदल सकते हैं क्रोम के लिए विन्यास भी !!

इस मुद्दे को हल करने के लिए मैं क्या करूँगा आईटी लोगों से ब्राउज़र में प्रॉक्सी पर कुछ सिंटिनो नियम के साथ ब्राउज़रों को कॉन्फ़िगर करने के लिए कहें (यदि आप किसी कंपनी में हैं)।

मुझे आशा है कि यह किसी अन्य तरीके से मदद कर सकता है !!

गेब्रियल

0

आप Fiddler में अपने साबुन अनुरोध रखा और फिर निष्पादित आप प्रतिसाद मिलेगा कर सकते हैं। उस प्रतिक्रिया प्रकार के लिए। जब आप प्रतिक्रिया प्राप्त करते हैं तो इसे उस मोड में देखें जिसे आप चाहते हैं।

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