Riferimento Web e riferimento al servizio


110

Ho appena colpito un enorme muro di mattoni con Paypal. Avevo creato un normale progetto C # per creare alcune classi wrapper utilizzando il loro WSDL.

Se crei un progetto non Web, l'unica opzione che ottieni per aggiungere un wsdl è un riferimento al servizio Web. E questo costruisce un po 'lo stesso insieme di classi proxy come farebbe un riferimento Web, ma non proprio .. aggiunge di più che nemmeno i ragazzi di PayPal sono a conoscenza.

Quindi ho cercato per tutto il tempo l'interfaccia giusta in questo elenco di classi proxy da utilizzare come servizio (SoapBinding) e PayPalAPIAASoapBindingnon c'era ho continuato a dire al nostro punto di contatto PayPal.

Ho potuto vedere solo le seguenti 2 interfacce che mi sembravano quelle che dovevo usare poiché non ho visto una PayPalAPIAASoapBindingche puoi vedere in un riferimento al servizio basato su Web Reference:

PayPalAPIAAInterfaceClient
PayPalAPIInterfaceClient 

Quindi ho capito, oh, probabilmente avevo creato un riferimento al servizio rispetto a un riferimento web il cui riferimento web è un'opzione in un progetto web. Ma non voglio che il mio riferimento al servizio sia strettamente collegato al mio progetto web. Ecco perché ho creato il progetto C #.

Quindi cosa diavolo è un riferimento al servizio rispetto a un riferimento web? E come dovrei separarlo in un altro progetto se Service Reference mi lancia un ciclo e mi fornisce una serie di interfacce diverse rispetto a un riferimento Web?

Inoltre, per rendere le cose ancora PIÙ confuse, VS 2008 ha un progetto di applicazione del servizio Web.

Allora cosa uso? Stiamo usando il framework .NET 3.5 e siamo non pronti a passare a WCF . Quindi posso ancora utilizzare il nuovo riferimento al servizio anche se non utilizzo WCF o cosa? SE stai ancora utilizzando .NET 3.5 e non WCF e desideri ancora eseguire servizi Web di base, segui ancora la route di riferimento del servizio e non usi il framework WCF? Significa che può ancora essere usato come un riferimento Web .NET 2.0, solo che otterrai una generazione completamente diversa di WSDL?



2
8 anni dopo e ancora attuale.
Mike Devenney

Risposte:


213

Aggiungi riferimento Web è la tecnologia obsoleta e obsoleta dei servizi web ASP.NET (ASMX) (che utilizza solo XmlSerializer per le tue cose): se lo fai, ottieni un client ASMX per un servizio web ASMX. Puoi farlo in quasi tutti i progetti (app Web, sito Web, app console, Winforms - lo chiami).

Aggiungi riferimento al servizio è il nuovo modo di farlo, aggiungendo un riferimento al servizio WCF, che ti offre un modello di servizio molto più avanzato e molto più flessibile rispetto alle semplici vecchie cose ASMX.

Dato che non sei pronto per passare a WCF, puoi anche aggiungere il riferimento web vecchio stile, se proprio devi: quando fai un "Aggiungi riferimento al servizio", nella finestra di dialogo che appare, fai clic su [Avanzate ] pulsante nell'angolo sinistro del pulsante:

testo alternativo

e nella finestra di dialogo successiva che si apre, seleziona il pulsante [Aggiungi riferimento Web] in basso.


6
Quanto è stupido per MS nasconderlo in una finestra di dialogo WCF! Non ha nemmeno alcun senso con il posizionamento qui
PositiveGuy

9
@coffeeaddict: beh, penso che MS stia cercando di indurti sottilmente a usare WCF per impostazione predefinita - e solo ASMX vecchio stile se sei davvero determinato :-)
marc_s

27
Se usi Alt + PrtScn puoi scattare un'istantanea della sola finestra attiva corrente, in questo modo non dovrai ritagliare manualmente solo quello che vuoi mostrare: o)
Ernest

Ciò richiederà .NET 2.0 anche sul computer? O .NET 4.0 sarà in grado di gestire la tecnologia "Web Reference" basata su .NET 2.0? Voglio sapere perché sto distribuendo un servizio web SOAP come "Riferimento Web" in un'applicazione .NET 4.0.
Computer User

1
@sparkyShorts: sì.
marc_s

9

Se ho capito bene la tua domanda:

Per aggiungere un riferimento al servizio Web .net 2.0 invece di un riferimento al servizio WCF, fare clic con il pulsante destro del mouse sul progetto e fare clic su "Aggiungi riferimento al servizio".

Quindi fare clic su "Avanzate .." in basso a sinistra nella finestra di dialogo.

Quindi fare clic su "Aggiungi riferimento Web .." in basso a sinistra nella finestra di dialogo successiva.

Ora puoi aggiungere un normale riferimento web SOAP come stai cercando.


Ciò richiederà .NET 2.0 anche sul computer? O .NET 4.0 sarà in grado di gestire la tecnologia "Web Reference" basata su .NET 2.0? Voglio sapere perché sto distribuendo un servizio web SOAP come "Riferimento Web" in un'applicazione .NET 4.0.
Computer User

4

L'aggiunta di un riferimento al servizio consente di creare un client WCF, che può essere utilizzato per parlare con un normale servizio Web a condizione che si utilizzi l'associazione appropriata. L'aggiunta di un riferimento Web consentirà di creare solo un riferimento a un servizio Web (ad esempio SOAP).

Se sei assolutamente certo di non essere pronto per WCF (davvero non sai perché), dovresti creare un normale riferimento al servizio web.


3
Perché WCF NON è facile per i neofiti. E inoltre il mio capo non mi permette di trasferirmi lì è il vero motivo. È codice ed esegui qui. Quando hai quella situazione, non posso farci niente, amico.
PositiveGuy

7
@coffeeaddict Penso che tu e il tuo capo siate male informati. Entrambi i tipi di riferimenti creeranno una classe che fornisce metodi per chiamare le operazioni del servizio. In che modo è rilevante che la classe creata da un riferimento "servizio" erediti da una classe base che si trova in una libreria che Microsoft considera essere parte di una tecnologia chiamata WCF?
Daniel Pratt

1
Ciò richiederà .NET 2.0 anche sul computer? O .NET 4.0 sarà in grado di gestire la tecnologia "Web Reference" basata su .NET 2.0? Voglio sapere perché sto distribuendo un servizio web SOAP come "Riferimento Web" in un'applicazione .NET 4.0.
Computer User

3

Alla fine, entrambi fanno la stessa cosa. Esistono alcune differenze nel codice: Web Services non aggiunge uno spazio dei nomi radice del progetto, ma Service Reference aggiunge classi di servizio allo spazio dei nomi del progetto. La ServiceSoapClientclasse riceve una denominazione diversa, il che non è importante. Lavorando con TFS preferisco usare Service Reference perché funziona meglio con il controllo del codice sorgente. Entrambi funzionano con i protocolli SOAP.

Trovo che sia meglio usare il riferimento del servizio perché è nuovo e sarà quindi mantenuto meglio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.