2012-11-29 18 views
21

Ho un servizio web WCF e un client javascript che si connette a questo servizio tramite AJAX utilizzando SOAP 1.2. Quello che voglio fare è passare alcuni parametri per dire alla chiamata SOAP AJAX a utilizzare solo un proxy lo stesso che faccio nel client di test WCF deselezionando "Avvia un nuovo proxy". imageCome utilizzare un proxy in javascript AJAX utilizzando SOAP come WCF Test Client usa

E questo è il mio SOAP chiamata 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

E 'questo il tuo server o un servizio SOAP di terze parti? Mi sto chiedendo a causa dei problemi del sito incrociato se stai facendo in modo che il cliente pubblichi xml tramite questa funzione a SOAP di terze parti. Credo che la maggior parte dei browser non ti consenta di pubblicare xml su una terza parte direttamente tramite js dalla tua pagina web di origine. Dal tuo schermo wcf, lo prendo è interno. Quindi cosa intendi per proxy quindi per il client del browser? – williambq

+0

@williambq Grazie per il tuo commento. Questo è il mio server.non una terza parte. – liorafar

+2

Quindi, penso che stai cercando di ottenere un proxy Singleton sul posto? Quindi ogni richiesta crea una nuova istanza del proxy quando viene chiamato? – williambq

risposta

1

Comincerò dicendo che non conosco la risposta specifica a questo, ma il mio approccio sarebbe quello di annusare il traffico dal tuo WFC Prova Client per vedere se sta aggiungendo qualsiasi parametro alla chiamata che potresti aggiungere alla tua intestazione di richiesta sulla tua chiamata AJAX.

Fiddler potrebbe fare il lavoro anche se non sono sicuro che catturerà tutto il traffico http - per lo più è orientato ai browser. Esistono altri strumenti con più o meno capacità e facilità d'uso, come lo squalo , ether e così via.

Suppongo che ci sia qualche altro parametro di richiesta all'esterno del corpo della busta SOAP trasmesso dal client di test che si dovrebbe essere in grado di vedere. È l'unico modo in cui posso immaginare che il client di test sia in grado di comunicare ciò senza modificare il messaggio SOAP.

Se è possibile trovare il nome e il valore, è possibile aggiungerlo ai dati: parametro come un'altra entità JSON con valore nome.

0

liorafar: Suppongo che tu stia eseguendo Javascript da un browser come ospite. Se è così, non è possibile a meno che tu non permetta al javascript di modificare alcuni comportamenti del tuo host che è con i client aproval per ogni esecuzione che il browser identifica come rischio di sicurezza. Si consideri che: 1) Javascript non ha il controllo sulla configurazione della connessione, utilizza solo l'ambiente fornito dall'host su cui è in esecuzione, in questo caso il browser ma può essere anche sul lato server. 2) Nel caso in cui dite "ok, lasciate forzare questo", l'unico modo in cui mi viene in mente è creare un'istanza del vostro host o qualsiasi oggetto dell'host client e forzare a cambiare la connessione ... e da quello momento il browser rileverà il tuo javascript come un rischio per la sicurezza e cerntanly dovresti creare uno script per ogni browser nel mercato, perché ognuno ha modo di gestirlo ... l'unica buona notizia su questo è che con IE puoi cambiare anche la configurazione per Chrome !!

Quello che farò per risolvere questo problema è chiedere al personale IT di configurare i browser con qualche regola exceptino sul proxy nei browser (se ci si trova in una società).

Spero che questo possa aiutare in un modo o nell'altro !!

Gabriel

0

È possibile inserire la vostra richiesta sapone in Fiddler e quindi eseguire otterrete la risposta. Per quel tipo di risposta. Quando ottieni la risposta, visualizzalo nella modalità desiderata.

Problemi correlati