Domanda

Ho un client di Silverlight che ho bisogno di chiamare un servizio web. Il servizio web è costruito in Java e utilizza la codifica XOP per attaccare messaggi binari ad alcuni dei suoi chiamate. Tuttavia, il servizio Silverlight utilizza solo le chiamate che non includono alcuna codifica binaria. Tuttavia, dal momento che non ho alcun controllo sul servizio web, devo ancora affrontare il XOP messaggio concatenato -. (Un esempio di uno è al di sotto)

Esempio di risposta dal servizio web (dati messi a nudo fuori)

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.5; JBoss-5.0/JBossWeb-2.1
Content-Type: multipart/related; type="application/xop+xml"; boundary="uuid:890535d9-d11f-4dfb-8393-789e20ea8064"; start="<root.message@cxf.apache.org>"; start-info="text/xml"
Date: Thu, 27 Jan 2011 22:03:09 GMT
Content-Length: 47247


--uuid:890535d9-d11f-4dfb-8393-789e20ea8064
Content-Type: application/xop+xml; charset=UTF-8; type="text/xml";
Content-Transfer-Encoding: binary
Content-ID: <root.message@cxf.apache.org>

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <ns2:Response xmlns:ns2="http://tempuri.com/"></ns2:Response>
    </soap:Body>
</soap:Envelope>
--uuid:890535d9-d11f-4dfb-8393-789e20ea8064--

La nostra attuale implementazione costruisce manualmente un messaggio SOAP utilizzando la sostituzione di stringa e utilizza la classe WebClient di inviare la richiesta e scaricare la risposta sotto forma di stringa. Stiamo poi bloccati con l'analisi manualmente i dati in formato XML. Questo è ok, ma è un po 'difficile, e abbiamo servizi REST disponibili per quella in ogni caso; Mi piacerebbe molto il proxy del servizio di rispondere con gli oggetti.

Quello che mi piacerebbe molto fare è implementare un comportamento personalizzato che intercettare il messaggio prima che i tentativi di stack WS per deserializzare SOAP e rimuovere il gunk XOP, ma finora non ho trovato nulla che mi permetterà di fare tale una cosa.

Il mio modo di vedere, ho un paio di opzioni:

  1. Creare un servizio di proxy sul server (che io controllo) che ripresentare la richiesta al servizio Java e può effettivamente gestire il XOP. Questa opzione ha implicazioni di prestazioni che vorrei evitare.

  2. Realizzare un MessageEncodingBindingElement personalizzato, MessageEncoderFactory, e MessageEncoder che gestirà il XOP. Questa opzione sembra la migliore in un primo momento, ma poiché non posso estendere la TextMessageEncoderFactory o TextMessageEncoder (sono classi interne) ho praticamente avuto bisogno di riscrivere l'intero messaggio codifica da zero (Grazie mille Microsoft!).

  3. Lascia la cosa così com'è.

Ci sono delle opzioni che non sono vedendo?

È stato utile?

Soluzione

No, non c'è nessun altre alternative.

Ho deciso di implementare un proxy pass-through ashx che utilizzerà il metodo WebClient.DownloadString () poi analizzare fuori solo il SOAP e la spina che nella risposta. Dovrebbe essere abbastanza flessibile, e meglio di tutti, posso solo utilizzare le classi proxy generati automaticamente da Silverlight, poi basta fare il punto finale utilizzare il mio ashx procura -., Che rende la manutenzione più semplice

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