2009-08-11 19 views
17

Actualmente estoy implementando una aplicación Silverlight utilizando WCF para la comunicación entre el cliente y el servidor. He escuchado que al usar WCF estamos obligados a usar alguna tecnología de Microsoft en el lado del cliente, y no podemos reemplazar fácilmente esto con "cualquier cosa", al menos con la implementación SOAP predeterminada de WPF.Alternativas a WCF

Así que mis preguntas son:

  • Es esto cierto?
  • ¿Qué pasa con los servicios de descanso de WCF? Me imagino una implementación REST simple, y cualquier cliente podría comunicarse con este lado del servidor a través de REST. ¿Sí? ¿No?
  • ¿Cuáles son las (buenas) alternativas para tirar WCF? ¿Y por qué querría hacer eso?

Respuesta

10

He oído que el uso de WCF estamos obligados utilizar una tecnología de Microsoft, en el lado del cliente

Bueno, entonces han mentido!

Muchos proveedores y bibliotecas de código abierto admiten SOAP: es un estándar W3C, no una idea específica de Microsoft.

Una gran alternativa para un servicio RESTful es ASP.NET MVC, que he encontrado una manera muy fácil de exponer los métodos directamente como URL.

+0

Oh, bueno, eso es bueno entonces. Sé que SOAP no es específico de MS, así que no entendía por qué WCF con SOAP nos uniría a Microsoft. ¡Gracias por aclarar esto! Y SOAP se usa por defecto cuando se crea un servicio WCF, ¿verdad? – stiank81

+0

El nombre "ASP .NET MVC" suena como algo que normalmente utilizas en - bueno - una aplicación ASP .NET. Claro, mi Silverlight está envuelto en ASP, pero ¿encajará mi aplicación Silverlight tan bien como lo haría con una aplicación ASP? – stiank81

+0

No, y sí;). Tienes que especificar el enlace (s) explícitamente. Entonces, tienes que elegir, por lo tanto, la palabra "predeterminado" no cabe aquí, por otro lado, no tienes que girar ninguna opción mágica en algún lado, es tu elección. –

1

para Java - WCF interopibility comprobar Proyecto Tango de Sun link

+0

Thx - ¡útil lectura! – stiank81

3

WCF le da un nivel de abstracción sobre la forma en que está/quiere comunicar. Por lo tanto, puede elegir un enlace que sea específico de Microsoft, pero también puede usar el protocolo SOAP o puede usar ambos para que un cliente que no sea de Microsoft pueda comunicarse a través de fe. SOAP y otro cliente pueden usar formas más robustas.
En cuanto a REST, es posible que desee consultar la charla de Hanselman en NDC here. Es posible que no responda tu pregunta directamente, pero podría señalarte algo.
En cuanto a las alternativas, no veo nada que se ejecute en .NET, además de los servicios web (pero, como WCF te ofrece todo esto y mucho más, preferiría considerarlo como una forma más antigua que una alternativa real) .

+0

¡Thx! Verificará la charla de Hanselman (enlace apropiado: http://media01.smartcom.no/microsite/asx.aspx?eventid=4499). Bueno, si WCF no me vincula con Microsoft, estoy contento con eso. Sin embargo, consideraré cambiar a REST ... Siento que a menudo se prefiere a SOAP en estos días, pero ¿podría estar equivocado? – stiank81

+1

REST está más de moda en este momento. SOAP es excesivo para la mayoría de las aplicaciones. XML no es una buena opción para representar datos jerárquicos de todos modos. SOAP/WSDL es un lío gigante de un estándar que incorpora el estándar XML Schema (que incorpora un estándar de expresión regular del consorcio Unicode). Comparado con todo eso, REST es casi nada, básicamente solo HTTP. Y, sin embargo, es más capaz que el SOAP básico (por ejemplo, puede devolver una imagen como una secuencia binaria). –

+1

No me siento lo suficientemente fuerte en este campo para responder a esta pregunta, pero sé una cosa que Hanselman mencionó allí: esas tecnologías son geniales para aplicaciones de clientes, etc., pero a veces, la idea de obtener (a menudo) datos binarios y ponerlos como texto entre corchetes puede ser una carga excesiva. En WCF me gusta el hecho de que puedo escribir lógica una vez (implementaciones de contratos) y luego acceder a ellos usando muchas formas con facilidad. –

4

WCF está basado en SOAP (de forma predeterminada, también admite REST) ​​y puede interactuar fácilmente con cualquier cliente que pueda entender y hablar SOAP.

Incluyen idiomas y sistemas como Java, PHP y muchos más.

WCF es la implementación de Microsoft, pero los estándares son todos estándares internacionales e interoperables. Nada sobre los estándares es específico de Mircosoft.

Marc

+2

Todo el mundo dice WCF no me une a Microsoft :-) Es bueno saberlo, obviamente me han informado falsamente ... ¡Thx! – stiank81

+3

Aunque suena muy buena "en el papel", en realidad, todavía hay un montón de pequeños pero molestos problemas con interopibility ... – Ray

+0

Sírvanse explicar en detalle los "pequeños pero molestos problemas de interoperabilidad". De lo contrario, eres tan malo como las personas que le dijeron al OP que WCF lo vincularía con Microsoft. –

15

estoy aparte del equipo central que mantiene ServiceStack - una alternativa madura Open Source a WCF: moderno, código primero, basado en modelos, servicios web WCF reemplazo marco encouraging code and remote best-practices para crear conciso, SECO , high-perfomance, scalable REST web services.

Tiene soporte automático JSON, JSONP, CORS encabezados, así como form-urlencoded/multipart-formdata. Las demostraciones en línea son un buen comienzo para mirar, ya que todas usan Ajax.

Además, no hay ninguna configuración XML, o el código de generación y su 'escribir una vez' servicio C# web proporciona todas JSON, XML, SOAP, JSV, CSV, HTML puntos finales habilitados fuera de la caja, de forma automática con ganchos para conectar su propia Content Types si es necesario .

También incluye generic sync/async service clients que proporciona una puerta de enlace de comunicaciones cliente/servidor rápida, mecanografiada de extremo a extremo.

Este es el ejemplo completo de todo el código necesario para crear un servicio web simple, es decir de forma automática sin ningún tipo de configuración, registrado y puesto a disposición en todo el web data formats on pre-defined and custom REST-ful routes:

public class Hello : IReturn<HelloResponse> 
{ 
    public string Name { get; set; } 
} 

public class HelloResponse 
{ 
    public string Result { get; set; } 
} 

public class HelloService : Service 
{ 
    public object Get(Hello request) 
    { 
     return new HelloResponse { Result = "Hello, " + request.Name }; 
    } 
} 

Por encima de servicio puede ser llamado (sin acumulaciones pasos/código-gen) en C# con la línea de abajo:

HelloResponse response = client.Get(new Hello { Name = "World!" }); 
response.Result.Print(); // => Hello, World 

Y en jQuery con:

$.getJSON('hello/World!', function(r){ 
    alert(r.Result); 
}); 
+7

Has mencionado esto como 'Código abierto'. Esto se ve como un producto comercial (aunque usted ofrece una versión 'lite' gratis). ¿El código fuente está disponible en Github? –

+0

https://github.com/ServiceStack/ServiceStack –

+0

Esto es "Openware", el propio código es de código abierto, pero es difícil de usar sin pagar por la versión "Pro". El tutorial, por ejemplo, requiere la instalación de una extensión paga de Visual Studio. –