Referencia web frente a referencia de servicio

110

Acabo de chocar contra una enorme pared de ladrillos con Paypal. Había creado un proyecto C # normal para crear algunas clases contenedoras usando su WSDL.

Si crea un proyecto que no es web, la única opción que tiene para agregar un wsdl es una referencia de servicio web. Y esto crea el mismo conjunto de clases de proxy que una referencia web, pero en realidad no ... agrega más de lo que ni siquiera los chicos de PayPal son conscientes.

Así que todo este tiempo estuve buscando la Interfaz correcta en esta lista de clases de proxy para usar como servicio (SoapBinding) y PayPalAPIAASoapBindingno estaba allí, le dije a nuestro punto de contacto de PayPal.

Solo pude ver las siguientes 2 interfaces que me parecieron lo que necesitaba usar, ya que no vi una PayPalAPIAASoapBindingque PUEDA ver en una referencia de servicio basada en Web Reference:

PayPalAPIAAInterfaceClient
PayPalAPIInterfaceClient 

Así que me di cuenta de que probablemente había creado una referencia de servicio frente a una referencia web, que es una opción en un proyecto web. Pero no quiero que mi referencia de servicio esté estrechamente relacionada con mi proyecto web. Por eso creé el Proyecto C #.

Entonces, ¿qué diablos es una referencia de servicio frente a una referencia web? ¿Y cómo se supone que voy a separar esto en otro proyecto si Service Reference me va a lanzar un bucle y me dará un conjunto de interfaces diferentes a las de una Web Reference?

Además, para hacer las cosas aún MÁS confusas, VS 2008 tiene un proyecto de Aplicación de Servicio Web.

Entonces, ¿qué uso? Estamos utilizando el marco .NET 3.5 y estamos no listo para pasar a WCF . Entonces, ¿puedo seguir usando la nueva referencia de servicio incluso si no uso WCF o qué? SI está usando .NET 3.5 y aún no WCF y aún desea hacer servicios web básicos, ¿sigue la ruta de referencia de servicio y simplemente no usa el marco WCF? Lo que significa que aún se puede usar como una referencia web .NET 2.0, solo que obtendrá una generación completamente diferente del WSDL.

PositiveGuy
fuente
Posible duplicación de ¿ Diferencia entre referencia web y referencia de servicio?
Sruit A.Suk
2
8 años después y sigue siendo relevante.
Mike Devenney

Respuestas:

213

Add Web Reference es la tecnología de servicios web ASP.NET obsoleta y antigua (ASMX) (que utiliza solo XmlSerializer para sus cosas); si hace esto, obtiene un cliente ASMX para un servicio web ASMX. Puede hacer esto en casi cualquier proyecto (aplicación web, sitio web, aplicación de consola, Winforms, lo que sea).

Agregar referencia de servicio es la nueva forma de hacerlo, agregando una referencia de servicio WCF, que le brinda un modelo de servicio mucho más avanzado y mucho más flexible que simplemente las cosas antiguas de ASMX.

Dado que no está listo para pasar a WCF, también puede agregar la referencia web de estilo antiguo, si realmente debe hacerlo: cuando haga una "Agregar referencia de servicio", en el cuadro de diálogo que aparece, haga clic en [Avanzado ] botón en la esquina izquierda del botón:

texto alternativo

y en el siguiente cuadro de diálogo que aparece, seleccione el botón [Agregar referencia web] en la parte inferior.

marc_s
fuente
6
¡Qué estúpido es que MS oculte eso en un cuadro de diálogo WCF! Ni siquiera tiene sentido con la ubicación aquí
PositiveGuy
9
@coffeeaddict: bueno, creo que MS está tratando de influir sutilmente en el uso de WCF de forma predeterminada, y solo ASMX de estilo antiguo si está realmente decidido :-)
marc_s
27
Si usa Alt + PrtScn, puede tomar una instantánea de la ventana activa actual, de esa manera no tendrá que recortar manualmente solo lo que desea que se muestre: o)
Ernest
¿Eso también requerirá .NET 2.0 en la computadora? ¿O .NET 4.0 podrá manejar la tecnología "Web Reference" basada en .NET 2.0? Quiero saberlo porque estoy implementando un servicio web SOAP como "Referencia web" en una aplicación .NET 4.0.
Usuario de computadora
1
@sparkyShorts: sí.
marc_s
9

Si entiendo bien tu pregunta:

Para agregar una referencia de servicio web .net 2.0 en lugar de una referencia de servicio WCF, haga clic con el botón derecho en su proyecto y haga clic en 'Agregar referencia de servicio'.

Luego haga clic en "Avanzado ..." en la parte inferior izquierda del cuadro de diálogo.

Luego, haga clic en "Agregar referencia web ..." en la parte inferior izquierda del siguiente cuadro de diálogo.

Ahora puede agregar una referencia web SOAP regular como está buscando.

Alce
fuente
¿Eso también requerirá .NET 2.0 en la computadora? ¿O .NET 4.0 podrá manejar la tecnología "Web Reference" basada en .NET 2.0? Quiero saberlo porque estoy implementando un servicio web SOAP como "Referencia web" en una aplicación .NET 4.0.
Usuario de computadora
4

Agregar una referencia de servicio le permite crear un cliente WCF, que se puede usar para hablar con un servicio web regular siempre que use el enlace apropiado. Agregar una referencia web le permitirá crear solo una referencia de servicio web (es decir, SOAP).

Si está absolutamente seguro de que no está listo para WCF (realmente no sé por qué), debe crear una referencia de servicio web regular.

Otávio Décio
fuente
3
Porque WCF NO es fácil para los novatos. Y, además, mi jefe no me deja mudarme a él, es la verdadera razón. Es codificar y ejecutar aquí. Cuando tienes esa situación, no puedo hacer nada al respecto.
PositiveGuy
7
@coffeeaddict Creo que usted y su jefe están mal informados. Ambos tipos de referencias crearán una clase que proporciona métodos para llamar a las operaciones de servicio. ¿Qué importancia tiene que la clase creada por una referencia de "servicio" herede de una clase base que se encuentra en una biblioteca que Microsoft considera parte de una tecnología que llama WCF?
Daniel Pratt
1
¿Eso también requerirá .NET 2.0 en la computadora? ¿O .NET 4.0 podrá manejar la tecnología "Web Reference" basada en .NET 2.0? Quiero saberlo porque estoy implementando un servicio web SOAP como "Referencia web" en una aplicación .NET 4.0.
Usuario de computadora
3

Al final, ambos hacen lo mismo. Hay algunas diferencias en el código: los servicios web no agregan un espacio de nombres raíz del proyecto, pero la referencia de servicio agrega clases de servicio al espacio de nombres del proyecto. losServiceSoapClient clase recibe un nombre diferente, lo cual no es importante. Al trabajar con TFS, prefiero usar Service Reference porque funciona mejor con el control de fuente. Ambos funcionan con protocolos SOAP.

Me parece mejor usar la referencia de servicio porque es nueva y, por lo tanto, se mantendrá mejor.

usuario3628475
fuente