L'aggiunta di metodi per il webservice: non i vecchi clienti hanno bisogno di aggiornare i riferimenti web?

StackOverflow https://stackoverflow.com/questions/2142813

Domanda

ProductA utilizza il nostro servizio di web unica, che è una distribuzione separata dalla ProductA. Abbiamo distribuire sia per la produzione.

In seguito, stiamo scrivendo ProductB. Durante questo sforzo, si aggiunge un nuovo metodo per il nostro servizio web solo. Questo nuovo metodo non era nel WSDL quando ProductA spedito. Non facciamo modifiche ai ProductA in fase di sviluppo.

Quando abbiamo distribuire ProductB alla produzione, abbiamo anche distribuire (alla produzione) la nuova versione del nostro servizio web solo (allo stesso URL endpoint dove ProductA si aspetta di trovarlo). Noi non ri-distribuire ProductA alla produzione.

Il WSDL per il nostro servizio web è cambiato solo nella produzione, ma le firme dei metodi di essere consumate da ProductA non sono cambiate. Sono ancora nel WSDL.

Will ProductA ha alcun problema a causa della nostra aggiornare il nostro unico servizio web in questo modo?

Hai aggiornare un cliente di un webservice se il webservice è cambiato in modo tale che ha lasciato i metodi del cliente originale invariata?

È stato utile?

Soluzione

No. Finché hai lasciato i metodi che usa Prodotto A da solo, non c'è bisogno di aggiornare la copia del prodotto A del WebReference.

Altri suggerimenti

Giusto per aggiungere un po 'più in dettaglio alla risposta esistente, le uniche modifiche a un servizio web che richiedono modifiche corrispondenti al proxy client sono:

  • metodi di rimozione;
  • cambiando metodo di firme;
  • Modifica del binding / comportamento (vale a dire usare la crittografia).

L'aggiunta di un nuovo metodo, o l'aggiunta di nuovi campi / proprietà a un tipo, sono quasi sempre variazioni non rottura (ancora, non fa male alla prova con il cliente).

Tenete a mente, naturalmente, che il cliente non sarà effettivamente in grado di usare tali nuovi metodi o proprietà fino a quando non ricostruire. Ma non si romperà esistente funzionalità.

Normalmente direi di no. Tuttavia, abbiamo uno su 50+ clienti che ha problemi con questo usando JAX-WS. Ottengono un errore come questo:

javax.xml.ws.WebServiceException: 

The Endpoint validation failed to validate due to the following errors: 

:: Invalid Endpoint Interface :: :: The operation names in the WSDL portType
do not match the method names in the SEI or Web service implementation class. 
wsdl operations = [...] 

Credo che è legata a questo:

http://pic.dhe.ibm.com/infocenter/wasinfo/v8r0/index.jsp?topic=%2Fcom.ibm.websphere.nd.multiplatform.doc%2Finfo% 2Fae% 2Fae% 2Ftwbs_devjaxws_exposewebmethod.html

che dice: " Best practice :. Essere sicuri di rigenerare il vostro cliente di artefatti indesiderati ogni volta che si riceve un file WSDL aggiornato"

Tuttavia, il WSDL sul lato server viene controllato a run-time nel nostro caso i clienti in modo non riesce, non appena si aggiunge un nuovo metodo. Non conosco le specifiche o la portata del problema, ma sembra si può scrivere un applicazione client SOAP che si romperà con nuovi metodi nel WSDL servito dal servizio.

Non ho voglia di carillon in su un thread di invecchiamento, e molti punti chiave sono stati già fatti, ma ho voluto aggiungere una nota su migrazione quadri. Ho avuto comportamenti insoliti, a volte, dopo la migrazione da .Net 2.0 fino, tutto il percorso attraverso 4.6. Vorrei elaborare più sugli errori specifici, ma erano un po 'di tempo fa.

Voglio aggiungere anche che, nonostante la maggior parte di questi commenti, ho avuto numerosi problemi da parte dei clienti che non aggiornano i riferimenti web anche dopo le modifiche minime descritte qui. E mi permetto di aggiungere che questo potrebbe essere il risultato della quadro più recente. Ho letto in numerosi luoghi in MSDN nel corso degli anni che il WSDL dovrebbe sempre essere rigenerato.

In realtà ho cercato per una tecnica per farlo automaticamente. Al fine di impedire gli arresti lato client quando i servizi web non vengono aggiornati. Sono inciampato in tutta questa discussione in quella ricerca.

Non proprio una risposta, ma troppo lungo per un commento qui.

Mentre sono d'accordo che probabilmente non ci sarà alcun problema, non aggiornare i riferimenti di servizio dei clienti esistenti, si dovrebbe anche chiedere quali problemi ci saranno se do aggiornare i riferimenti di servizio di esistenti clienti. Assicurati di testare questo scenario pure.

Anche se tendiamo a pensare di aggiungere metodo per il servizio come qualcosa che è importante solo sul server, tenere a mente che quando si aggiorna un riferimento al servizio, questo è in realtà cambiando il codice del cliente.

Alcune organizzazioni credono in codice client test quando il codice client modifiche.

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