Domanda

Sto riscontrando un problema con Delphi 2007 quando provo a utilizzare un servizio Web che ho impostato in Java usando JAX-WS. Il servizio Web può essere utilizzato correttamente da un altro programma Java e da un sito Web C # / ASP.NET 2.0. Tuttavia, quando provo ad accedere allo stesso servizio utilizzando l'importatore WSDL in Delphi 2007 (patch 17-DEc-2007), il servizio Web JAX-WS non riconosce nessuno dei parametri che sto passando e li annulla.

Ho controllato il messaggio SOAP che è stato passato da Delphi e l'ho confrontato con gli altri e sono praticamente identici (ad eccezione di alcuni decadimenti trascurabili dello spazio dei nomi e un sacco di stato di visualizzazione da quello .NET!)

Sono stato anche in giro per il web (il collegamento più utile è stato il http://www.bobswart.nl/Weblog/Blog.aspx?RootId=5:798 ) ma nessuna gioia.

Qualcuno l'ha mai visto prima?

TIA.


La saga continua!

Dopo aver smanettato con l'oggetto HTTPRIO per provare a farlo funzionare, alla fine ho rinunciato e ho provato un trasferimento XML diretto su HTTP. Fail.

OK, quindi ho creato un semplice tester in C # e l'ho provato. Funziona senza problemi.

Usando Fiddler per vedere cosa veniva inviato avanti e indietro sembrava che l'unica differenza fosse negli spazi dei nomi. Ho cambiato gli spazi dei nomi nell'invio XML in Delphi e ... funziona!

Questo era un esempio dell'XML originale generato dal WSDLImporter:

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
        <version xmlns="http://path.to.service.com/">
            <input>test</input>
        </version>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

ed ecco cosa funziona effettivamente:

<?xml version="1.0"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <ns2:version xmlns:ns2="http://path.to.service.com/">
            <input>test</input>
        </ns2:version>
    </S:Body>
</S:Envelope>

Quindi, ora che lo so, devo cambiare i valori dello spazio dei nomi per il codice WSDLImporter? Non riesco a vedere nulla di ovvio nelle proprietà HTTPRIO.

TIA

È stato utile?

Soluzione

HA HA VIVE !!!

Fondamentalmente ho dovuto togliere il raccomandato

InvRegistry.RegisterInvokeOptions(TypeInfo(ActivityService), ioDocument);

e forzalo a usare il Sec. 5 codifica. Gli spazi dei nomi vengono generati come richiesto e i parametri vengono passati al servizio Web Java.

Bene, ho bisogno di birra, molta birra :)

Altri suggerimenti

Dovresti semplicemente commentare questa riga nel tuo WSDL:

//InvRegistry.RegisterInvokeOptions(TypeInfo(WebService), ioDocument);

Basta ... divertiti.

Non è la soluzione al tuo problema, ma di recente ho avuto problemi con lo stesso ambiente. Ho dovuto cambiare le opzioni molte volte fino a trovare il modo giusto di consumare il servizio web (scritto in C #).

Check:

- THTTPRIO.Converter.Options
- THTTPRIO.HTTPWebNode
- THTTPRIO.HTTPWebNode.InvokeOptions

Ho sbattuto la testa contro il muro per due giorni, fino a quando ho trovato questo post ... E Cesars ha suggerito di controllare THTTPRIO.Converter.Options ... Ho provato quasi tutto, l'ultimo è stato quello di impostare soXXXXHdr su true - > poi è successo qualcosa di strano, niente più null al server: O ...

Non so perché questa impostazione faccia passare i valori, lo fa (almeno per me).

Sarebbe bello se qualcuno che capisse davvero cosa stava succedendo lo spiegherebbe.

La rimozione di soSendMultiRefObj da Converter.Options aiuta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top