visual tutorial studio services entre diferencia cuál consumir wcf web-services

wcf - tutorial - web service c#



WCF: ¡WTF! ¿WCF eleva el nivel o solo el nivel de complejidad? (16)

Entiendo el valor del modelo de servicio / host / cliente de tres partes ofrecido por WCF. ¿Pero solo soy yo o parece que WCF tomó algo bastante directo y directo (el modelo ASMX) y lo hizo un desastre?

¿Hay alguna alternativa para usar el paso de la línea de comandos de SvcUtil en el tiempo para generar el proxy? Con los servicios de ASMX, se proporcionó automáticamente un arnés de prueba; ¿Hay una buena alternativa hoy con WCF?

Aprecio que las cosas de WS * estén más estrechamente integradas con WCF y espero encontrar algún beneficio para WCF allí, pero geze, de lo contrario estoy perplejo.

Además, el estado de los libros disponibles para WCF es abismal en el mejor de los casos. Juval Lowy, un excelente autor, ha escrito un buen libro de referencia de O''Reilly "Programming WCF Services" pero no hace tanto (para mí de todos modos) para aprender ahora a usar WCF. El precursor de ese libro (y un poco mejor organizado, pero no mucho, como tutorial) es Learning WCF de Michele Leroux Bustamante. Tiene buenos lugares, pero está desactualizado y su sitio web correspondiente ya no existe.

¿Tiene buenas referencias de aprendizaje de WCF, además de continuar Google el bejebo de cosas?

Gracias, rp


¡Mis pensamientos iniciales sobre WCF eran exactamente lo mismo! Aquí hay algunas soluciones:

  1. Programe su propia capa de proxy / cliente utilizando genéricos (consulte las clases ClientBase , Enlace). Me pareció fácil trabajar, pero difícil de perfeccionar.
  2. Use una implementación de terceros de 1 ( SoftwareIsHardwork es mi favorito actual)

Creo que WCF realmente avanza en la implementación de servicios web ASMX de muchas maneras. En primer lugar, proporciona un modelo de objetos en capas muy agradable que ayuda a ocultar la complejidad intrínseca de las aplicaciones distribuidas. En segundo lugar, puede tener más patrones de mensajes de solicitud y repetición, incluidas notificaciones asincrónicas de servidor a cliente (imposibles con HTTP puro) y en tercer lugar abstraer el protocolo de transporte subyacente de la mensajería XML y admitir de manera elegante HTTP, HTTPS, TCP y otros. La compatibilidad con los servicios web de "1ª generación" también es un plus. WCF usa XML estándar como el formato de representación interna. Esto podría ser percibido como una ventaja o una desventaja, especialmente con la creciente popularidad de "alternativas sin grasa a XML" como JSON.


En términos de lo que ofrece, creo que la respuesta es la compatibilidad. Los servicios ASMX eran bastante Microsofty. No quiere decir que no trataron de ser compatibles con otros consumidores; pero el modelo no fue diseñado para adaptarse mucho más allá de las páginas web ASP.NET y algunos otros consumidores personalizados de Microsoft. Mientras que WCF, debido a su arquitectura, permite que su servicio tenga puntos finales basados ​​en estándares muy abiertos, por ejemplo, REST, JSON, etc. además del SOAP habitual. Es probable que a otras personas les resulte mucho más fácil consumir su servicio WCF que su ASMX.

(Todo esto se infiere básicamente de la lectura comparativa de MSDN, por lo que alguien que sepa más debería sentirse libre de corregirme).


Encuentro que es un dolor; en eso tengo .NET en ambos extremos, tengo los mismos dlls "contractuales" cargados en ambos extremos, etc. Pero luego tengo que meterme con muchos detalles, como los atributos "KnownType".

WCF también se limita a permitir que 1 o 2 clientes se conecten a un servicio hasta que cambie un montón de configuración. Cambiar la configuración del código no es fácil, enviar muchos archivos comfig no es una opción, ya que es muy difícil fusionar nuestros cambios con los cambios que un cliente puede haber realizado en el momento de una actualización (tampoco queremos clientes). jugando con la configuración de WCF!)

.NET remoto tiende a funcionar la mayor parte del tiempo.

Creo que tratar de pretender que las comunicaciones basadas en objetos de .NET a .NET es lo mismo que enviar un bit de Texto (xml) a un sistema desconocido, fue un paso demasiado lejos.

(Las pocas veces que usamos WCF para hablar con un sistema Java, encontramos que el XSD que el sistema java daba no coincidía con el XML que quería de todos modos, así que tuvimos que codificar manualmente muchas de las asignaciones de XML).


Espera ... alguna vez usaste .NET Remoting, porque eso es lo que está reemplazando. .NET Remoting es bastante complicado. Encuentro que WCF es más fácil y mejor distribuido.


Las cosas difíciles que encuentro con WCF son la administración de configuraciones para clientes y servidores, y la solución de problemas de excepciones de estado con fallas no tan agradables.

Sería genial si alguien tuviera atajos o consejos para ellos.


MSDN? Por lo general, me va bastante bien con la referencia de la biblioteca, y generalmente espero encontrar artículos valiosos allí.


No veo que se mencione con frecuencia, pero aún puede implementar servicios bastante simples con WCF, muy similar a los servicios ASMX. Por ejemplo:

[ServiceContract] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class SimpleService { [OperationContract] public string HelloWorld() { return "Hello World"; } }

Aún debe registrar el punto final en su web.config, pero eso no es tan malo.

La eliminación de la verbosidad de los datos separados, el servicio y los contratos de operación hacen que la WCF sea más manejable para mí.



Si está utilizando VS2008 y crea un proyecto WCF, obtendrá automáticamente un arnés de prueba cuando acceda a ejecutar / depurar y podrá agregar una referencia sin tener que usar svcutil.


Tengo dificultades para ver cuándo debo o usar WCF. ¿Por qué? Porque pongo la productividad y la simplicidad en la cima de mi lista. ¿Por qué el modelo ASMX fue tan exitoso, porque funcionó y lo hace funcionar rápido? Y con VS 2005 y .NET 2.0 wsdl.exe estaba escupiendo servicios muy agradables y compatibles.

En la vida real, debe tener muy pocos protocolos de comunicación en su arquitectura. Esto lo mantiene simple y fácil de mantener. Si necesita acceder a sistemas heredados, escriba adaptadores específicos para que puedan jugar en el bonito y brillante mundo de SOA.


VS2008 incluye la opción de menú contextual "Agregar referencia de servicio" que creará el proxy para usted detrás de las escenas.

Como se mencionó anteriormente, WCF no pretende ser únicamente un reemplazo de los tipos de servicios web ASMX, sino proporcionar una metodología coherente, segura y escalable para todos los servicios interoperables, ya sea a través de HTTP, tcp, pipes nombrados o MSMQ transportes.

Confesaré que tengo otros problemas con WCF (por ejemplo, volver a escribir las firmas de métodos al exponer un servicio a través de HTTP básico - ver here , pero en general, creo que es un cambio definitivo)


WCF es mucho más poderoso que ASMX y lo extiende de varias maneras. ASMX está limitado solo a HTTP, mientras que WCF puede usar varios protocolos para su comunicación (se concede que HTTP sigue siendo la forma en que la mayoría de la gente lo usará, al menos para los servicios que necesitan ser interoperables). WCF también es más fácil de extender. Al menos, es posible extenderlo de manera que ASMX no se pueda extender. "Fácil" puede ser estirarlo. =)

La funcionalidad agregada ofrecida por WCF supera con creces la complejidad que agrega, en mi opinión. También siento que el modelo de programación es más fácil. Los DataContracts son mucho más agradables que tener que serializar usando la serialización XML con propiedades públicas para todo, por ejemplo. También es mucho más declarativo por naturaleza, lo cual también es bueno.


WCF no debe considerarse como un reemplazo para ASMX. A juzgar por cómo se posiciona y cómo está siendo utilizado internamente por Microsoft, es realmente una pieza de arquitectura fundamental que se utiliza para cualquier tipo de comunicación entre fronteras.


WCF es un reemplazo para todas las tecnologías de servicios web anteriores de Microsoft. También hace mucho más de lo que tradicionalmente se considera como "servicios web".

Los "servicios web" de WCF son parte de un espectro mucho más amplio de comunicación remota habilitada a través de WCF. Obtendrá un grado mucho más alto de flexibilidad y portabilidad haciendo cosas en WCF que a través de ASMX tradicional, ya que WCF está diseñado desde cero para resumir todas las diferentes infraestructuras de programación distribuidas que ofrece Microsoft. Un punto final en WCF se puede comunicar con la misma facilidad a través de SOAP / XML que con TCP / binary y cambiar este medio es simplemente un mod de archivo de configuración. En teoría, esto reduce la cantidad de código nuevo que se necesita para portar o cambiar necesidades comerciales, objetivos, etc.

ASMX is older than WCF, and anything ASMX can do so can WCF (and more) . Básicamente, puede ver que WCF intenta agrupar lógicamente todas las formas diferentes de conseguir que dos aplicaciones se comuniquen en el mundo de Microsoft; ASMX fue solo una de estas muchas formas, por lo que ahora se encuentra agrupada bajo el paraguas de capacidades de WCF.

Se puede acceder a los servicios web solo a través de HTTP y funciona en un entorno sin estado, donde WCF es flexible porque sus servicios se pueden alojar en diferentes tipos de aplicaciones. Los escenarios comunes para hospedar los servicios de WCF son IIS, WAS, Self-hosting, Managed Windows Service.

La principal diferencia es que los servicios web utilizan XmlSerializer. Pero WCF usa DataContractSerializer, que es mejor en rendimiento en comparación con XmlSerializer.

En qué escenarios debe usarse WCF

  • Un servicio seguro para procesar transacciones comerciales. Un servicio que
  • proporciona datos actuales a otros, como un informe de tráfico u otro
  • servicio de monitoreo Un servicio de chat que permite a dos personas
  • comunicar o intercambiar datos en tiempo real. Una aplicación de tablero de instrumentos
  • que sondea uno o más servicios de datos y los presenta de forma lógica
  • presentación. Exponer un flujo de trabajo implementado con Windows Workflow
  • Fundación como un servicio WCF. Una aplicación de Silverlight para sondear
  • servicio para los últimos feeds de datos.

Características de WCF

  • Orientación al servicio
  • Interoperabilidad
  • Múltiples patrones de mensajes
  • Metadatos de servicio
  • Contratos de datos
  • Seguridad
  • Múltiples transportes y codificaciones
  • Mensajes confiables y en cola
  • Mensajes duraderos
  • Actas
  • Soporte AJAX y REST
  • Extensibilidad

fuente: fuente principal de texto


De acuerdo, aquí vamos. Primero, el libro de Michele Leroux Bustamante ha sido actualizado para VS2008. El sitio web del libro no se ha ido. Está en este momento, y tiene toneladas de gran información de WCF. En ese sitio web, proporciona un código actualizado compatible con VS2008 para todos los ejemplos de su libro. Si realiza un pedido desde Amazon, obtendrá la reimpresión que se actualiza.

WCF no es solo un reemplazo para ASMX. Claro que puede (y lo hace bastante bien) reemplazar ASMX, pero el beneficio real es que permite que sus servicios sean autohospedados. La mayor parte de la funcionalidad de WSE se ha incorporado desde el principio. El marco es altamente configurable, y la capacidad de servir múltiples puntos finales sobre múltiples protocolos es increíble, IMO.

Si bien aún puede generar clases de proxy desde la opción "Agregar referencia de servicio", no es necesario. Todo lo que tiene que hacer es copiar su interfaz de ServiceContract y decirle a su código dónde encontrar el punto final para el servicio, y eso es todo. Puede llamar a los métodos del servicio con muy poco código. Al usar este método, usted tiene control total sobre la implementación. Independientemente del método que elija para generar una clase de proxy, Michele muestra ambos y usa ambos en su excelente serie de webcasts sobre el tema.

Michele tiene toneladas de material excelente, y le recomiendo que revise su (s) sitio (s) web. Aquí hay algunos enlaces que fueron increíblemente útiles para mí, ya que estaba aprendiendo WCF. Espero que te des cuenta de lo fuerte que realmente es WCF y de lo fácil que es implementarlo. La curva de aprendizaje es un poco alta, pero las recompensas por su inversión de tiempo valen la pena:

Te recomiendo que veas al menos 1 de los webcasts de Michele. Ella es una presentadora muy efectiva, y obviamente tiene muchísimo conocimiento cuando se trata de WCF. Ella hace un gran trabajo de desmitificar el funcionamiento interno de WCF desde cero.