12 messaggi dal 04 febbraio 2011
Ciao a tutti,

non sono un esperto nel campo di WCF, ma finora ho sempre sviluppato servizi WCF se possiamo definire classici, definendo come da manuale il serviceContract con i relativi OperationContract, creando poi la classe implentante l'interfaccia definita.
Lato client ho quindi sempre referenziato il servizio WCF in modo da avere accesso ai metodi ed interrogarli per comunicare con il servizio WCF creato. Ho sempre definito metodi con tipi semplici e complessi e sono sempre riuscito a "consumare" i miei servizi.

Ora è emersa la necessità di inerrogare un servizio WCF che riceva in input una serie di informazioni, ma in formato XML le quali devono essere elaborate dal server e la risposta deve essere anch'essa una serie di dati in formato XML comprendenti le informazioni ottenute dall'elaborazione nonchè l'esito di questa.

Come potrei procedere per ottenere questo tipo di comportamento in WCF?
Lo scambio di dati in formato XML dovrà essere possibile tra servizio WCF e client sia .NET che JAVA.

Sapreste darmi qualche dritta per una soluzione ottimale, e ancora meglio qualche esempio di implementazione?

Grazie mille a tutti
Forse non lo sai, ma fino ad oggi hai già scambiato i dati in XML, solo che definendo le classi hai lasciato a WCF il compito di descrivere in XML quelle classi, sia come metadati, in modo che chi consuma il servizio (il tuo client, ma anche uno java) sappia esattamente quale xml arrivi.
Nel caso del tuo client .NET anche dall'altra parte tramite classi ti è viene nascosto che arriva l'xml.
Quindi, se devi scambiare xml quello che devi fare è definire una struttura di classi che lo rappresenti. Se invece l'xml è "un po' di tutto" e non c'è uno schema prestabilito allora hai vari modi:
- mettere l'xml in un campo stringa: bruttino perché di fatto sul cavo passa xml encodato dentro dell'altro xml
- usare un campo di tipo XmlElement/XElement: l'xml che ricevi o restituisci verrà inserito insieme al SOAP di tutta la richiesta
- usare il tipo Message come richiesta e/o risposta, dove puoi metterci quello che vuoi, e anche manipolare gli header soap ecc

Dal punto di vista dei metadati (wsdl) risulterà un anytype, cioè che può arrivare qualsiasi xml come body della richiesta

Ciao

Il mio blog
Homepage
12 messaggi dal 04 febbraio 2011
Ciao Ricciolo,

innanzitutto grazie per la tua risposta tempestiva e precisa :). Diciamo che sapevo bene che il protocollo SOAP utilizzava il linguaggio XML per lo scambio dati, ma non mi sono mai addentrato nelle specifiche in quanto WCF rende la parte di scambio praticamente trasparente ed il risultato si riduce alla chiamata di un metodo "classico" .NET.
Prima di postare mi ero documentato anch'io sulla possibilità di inviare l'XML come stringa, ma mi sembrava un po' spartana come soluzione, anche se qualcuno l'ha adottata. I file XML che scambio con i client hanno una struttura variabile ovvero hanno sempre un header fisso, ma il contenuto è variabile, quindi pensavo che le soluzioni ottimali tra quelle da te proposte potrebbero essere la seconda o la terza.

Domanda 1) Se utilizzassi la seconda, passando a WCF quindi un oggetto XmlElement, nel caso di client JAVA il tipo XmlElement viene riconosciuto come in .NET e quindi il client può elaborare la richiesta o deve essere fatto qualcosa.

Domanda 2) Se utilizzassi la terza, utilizzando il MessageContract, il mio XML verrebbe trattato come un Oggetto con i relativi membri se ho capito bene:

http://msdn.microsoft.com/it-it/library/ms730255.aspx

Ma come dovrei passare il foglio XML a WCF?

Avresti gentilmente dei riferimenti/link da consultare per entrambe le soluzioni?

Grazie mille, ciao

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.