2008-11-21 17 views
117

¿Cuál es la diferencia entre referencia web y referencia de servicio en WCF? ¿Cuál es preferible en WCF?¿Diferencia entre referencia web y referencia de servicio?

+0

También eche un vistazo a las fábricas de canales - http://stackoverflow.com/questions/1698275/wcf-channelfactory-vs-generating-proxy –

+1

hmm, tal vez seleccione una respuesta? buena pregunta por cierto –

Respuesta

14

La referencia de servicio es la interfaz más nueva para agregar referencias a todo tipo de servicios WCF (puede que no sean servicios web) mientras que la referencia web se refiere específicamente a referencias web ASMX.

Puede acceder a las referencias web a través de las opciones avanzadas en Agregar referencia de servicio (si lo recuerdo correctamente).

Usaría la referencia de servicio porque, según tengo entendido, es el mecanismo más nuevo de los dos.

+8

Add Service Reference -> Advanced -> Add Web Reference ...nada como soluciones intuitivas. – Jagd

6

Las referencias de servicio tratan con puntos finales y enlaces, que son completamente configurables. Le permiten señalar su proxy de cliente a un WCF a través de cualquier protocolo de transporte (HTTP, TCP, memoria compartida, etc.)

Están diseñados para funcionar con WCF.

Si utiliza un WebProxy, que están más o menos a sí mismo vinculante para el uso de WCF a través de HTTP

5

Otro punto a tener en consideración es que la nueva interfaz de usuario para la interfaz de servicio le dará mucha más flexibilidad en la forma en que desea crea tu clase de proxy. Por ejemplo, le permitirá mapear contratos de datos a dlls existentes, si coinciden (en realidad este es el comportamiento predeterminado).

88

La respuesta de bajo nivel aquí es que una referencia web creará una clase de proxy del cliente que permite que su código hable a un servicio web que se describe a través de WSDL y se comunica mediante SOAP o HTTP GET (otros carteles indican que es solo ASMX, pero las Referencias Web también pueden hablar con Servicios Web basados ​​en Java o basados ​​en Python o Ruby siempre que todos hablen WSDL y cumplan con el estándar de interoperabilidad WS-I).

Una Referencia de servicio creará una clase de cliente proxy que se comunica con un servicio basado en WCF: independientemente de si ese servicio WCF es un servicio web o no.

+1

+1 para agregar que cualquier servicio web estándar con un WSDL debidamente formateado cumple los criterios –

+0

¿Puedo agregar una referencia de servicio a un servicio web basado en Java? ¿Tendría todavía sentido? ya que Java no sabe nada sobre la pila de wcf ... – user20358

+0

sí, puede agregar una referencia de servicio a un servicio web Java, etc., si tiene un wsdl. La referencia de servicio lo tratará como una referencia web "clásica" en este caso. –

57

Una referencia web le permite comunicarse con cualquier servicio basado en cualquier tecnología que implemente WS-I Basic Profile 1.1, y expone los metadatos relevantes como WSDL. Internamente, usa la pila de comunicación ASMX del lado del cliente.

Una referencia de servicio le permite comunicarse con cualquier servicio basado en cualquier tecnología que implemente cualquiera de los muchos protocolos admitidos por WCF (que incluyen pero no se limitan a WS-I Basic Profile). Internamente, utiliza la pila de comunicación WCF en el lado del cliente.

Tenga en cuenta que estas dos definiciones son bastante amplias, y ambas incluyen servicios no escritos en .NET.

Es perfectamente posible (aunque no se recomienda) para agregar una referencia Web que apunta a un servicio WCF, siempre y cuando el punto final WCF utiliza basicHttpBinding o alguna variante de encargo compatibles.

También es posible agregar una referencia de servicio que apunta a un servicio ASMX. Al escribir el nuevo código, , siempre debe usar una Referencia de servicio simplemente porque es más flexible y está más preparada para el futuro.

+0

¿Alguien me puede ayudar a comenzar a utilizar un servicio a través de la Referencia de servicio? Con Web Reference, siempre parezco poder encontrar las funciones básicas en algún tipo de objeto de servicio. Con una referencia de servicio, no tanto. Como ejemplo, estoy tratando de utilizar el servicio de tarifas de FedEx para obtener precios para las diversas opciones de envío de FedEx. Sé que hay una llamada a getRates() allí, pero no puedo encontrarla con una referencia de servicio. –

+0

@BenMills: busque una clase con un sufijo 'Cliente'. –

Cuestiones relacionadas