2009-08-11 13 views
17

Je suis en train de mettre en œuvre une application Silverlight utilisant WCF pour la communication entre le client et le serveur. J'ai entendu dire que l'utilisation de WCF nous obligerait à utiliser une partie de la technologie Microsoft côté client et que nous ne pourrions pas facilement remplacer cela par "n'importe quoi" - au moins avec l'implémentation SOAP par défaut de WPF.Alternatives à WCF

Mes questions sont les suivantes:

  • Est-ce vrai?
  • Qu'en est-il des services de restauration WCF? J'imagine une implémentation REST simple, et n'importe quel client peut communiquer avec ce côté serveur via REST. Oui? Non? Quelles sont les (bonnes) alternatives à l'abandon de WCF?
  • Et pourquoi voudrais-je faire ça?

Répondre

10

J'ai entendu dire que l'utilisation de WCF nous sommes liés à utiliser une technologie Microsoft à l' du côté client

Eh bien, alors vous avez menti!

De nombreux fournisseurs et bibliothèques open source prennent en charge SOAP - c'est une norme W3C, pas une idée spécifique à Microsoft.

Une excellente alternative pour un service RESTful est ASP.NET MVC, que j'ai trouvé un moyen très facile d'exposer les méthodes directement en tant qu'URL.

+0

Oh, eh bien, c'est une bonne chose alors. Je sais que SOAP n'est pas spécifique à MS, donc je ne comprenais pas vraiment pourquoi WCF avec SOAP nous lierait à Microsoft. Merci d'avoir éclairci ça! Et SOAP est utilisé par défaut lors de la création d'un service WCF, n'est-ce pas? – stiank81

+0

Du nom "ASP .NET MVC" ressemble à quelque chose que vous utilisez généralement dans - bien - une application ASP .NET. Bien sûr, mon Silverlight est enveloppé dans ASP, mais est-ce que cela va aussi bien dans mon application Silverlight que dans une application ASP? – stiank81

+0

Non, et oui;). Vous devez spécifier la (les) liaison (s) explicitement. Donc - vous devez choisir, par conséquent, le mot "par défaut" ne rentre pas ici, d'un autre côté, vous n'avez pas besoin de tourner une option magique quelque part, c'est votre choix. –

1

Pour java - WCF interopibility vérifier Project Tango link

+0

Thx - lecture utile! – stiank81

3

WCF Sun vous donne un niveau d'abstraction sur la façon dont vous êtes/voulez communiquer. Ainsi, vous pouvez choisir une liaison spécifique à Microsoft, mais vous pouvez également utiliser le protocole SOAP ou, vous utilisez les deux, afin que le client non-Microsoft puisse communiquer via fe. SOAP, et d'autres clients peuvent utiliser des moyens plus robustes.
En ce qui concerne REST, vous pouvez consulter le discours de Hanselman sur NDC here. Cela pourrait ne pas vous répondre directement, mais cela pourrait vous indiquer quelque chose. En ce qui concerne les alternatives, je ne vois rien qui fonctionnerait sur .NET, à part les services web (mais, parce que WCF vous donne tout cela et beaucoup plus, je préfère le considérer comme un moyen plus ancien que réel) .

+0

Thx! Va vérifier l'exposé de Hanselman (lien approprié: http://media01.smartcom.no/microsite/asx.aspx?eventid=4499). Eh bien, si WCF ne me lie pas à Microsoft, j'en suis content. Je vais envisager de passer à REST si .. Je pense que c'est souvent préféré SOAP ces jours-ci - mais je peux me tromper? – stiank81

+1

REST est plus à la mode en ce moment. Le SOAP est trop lourd pour la plupart des applications. XML est mal adapté pour représenter des données hiérarchiques de toute façon. SOAP/WSDL est un désordre géant d'une norme, incorporant la norme XML Schema (qui incorpore une norme d'expression régulière du consortium Unicode). Comparé à tout cela, REST est presque rien, fondamentalement juste HTTP. Et pourtant, il est plus capable que le SOAP basique (par exemple, vous pouvez renvoyer une image en tant que flux binaire). –

+1

Je ne me sens pas assez fort dans ce domaine pour répondre à cette question, mais je sais une chose, que Hanselman a mentionnée ici - ces technologies sont excellentes pour les applications clientes etc., mais parfois, l'idée d'obtenir des données binaires et les mettre comme texte entre parenthèses peut être trop de frais généraux. En WCF, j'aime le fait que je puisse écrire la logique une fois (implémentations de contrats) et ensuite y accéder en utilisant de nombreuses façons avec facilité. –

4

WCF est basé sur SOAP (par défaut - supporte également REST) ​​et peut facilement interagir avec n'importe quel client qui peut comprendre et parler SOAP.

Ceux-ci comprennent des langages et des systèmes comme Java, PHP et bien d'autres.

WCF est l'implémentation de Microsoft - mais les standards sont tous des standards internationaux et interopérables. Rien sur les standards n'est spécifique à Mircosoft.

Marc

+2

Tout le monde dit WCF ne me lie pas à Microsoft :-) Bon à entendre - évidemment, j'ai été faussement informé .. Thx! – stiank81

+3

Alors que ça sonne très bien "sur le papier" en réalité il y a encore beaucoup de petits problèmes mais ennuyeux avec l'interopérabilité ... – Ray

+0

S'il vous plaît élaborer sur les «petits problèmes ennuyeux avec l'interopérabilité". Sinon, vous êtes aussi mauvais que les gens qui ont dit à l'OP que WCF le lierait à Microsoft. –

15

Je suis en dehors de l'équipe de base qui maintient ServiceStack - une maturité Open Source alternative à WCF: moderne, code premier, piloté par le modèle, les services Web de remplacement WCF cadre encouraging code and remote best-practices pour la création laconique, SEC , high-perfomance, scalable REST web services.

Il dispose d'un support automatique des en-têtes JSON, JSONP, CORS ainsi que des données formées en urlencoded/multipart-form. Les démos en ligne sont un bon début à regarder car ils utilisent tous Ajax.De plus, il n'y a pas de config XML ou de code-gen et votre service web C# 'write-once' fournit tous les points de terminaison JSON, XML, SOAP, JSV, CSV, HTML prêts à l'emploi, automatiquement avec des crochets pour brancher votre propre Content Types si nécessaire .

Il comprend également generic sync/async service clients fournissant une passerelle de communication client/serveur rapide et typée de bout en bout.

Ceci est l'exemple complet de tout le code nécessaire pour créer un service Web simple, qui est automatiquement sans aucune configuration, enregistrée et disponible sur tous les 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 }; 
    } 
} 

Au-dessus de service peut être appelé (sans construire étapes/code-gen) en C# avec la ligne ci-dessous:

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

Et en jQuery avec:

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

Vous l'avez mentionné comme 'Open Source'. Cela ressemble à un produit commercial (même si vous donnez une version «allégée» gratuitement). Le code source est-il disponible dans Github? –

+0

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

+0

Ceci est "Openware", le code lui-même est open source, mais il est difficile à utiliser sans payer pour la "version Pro". Le tutoriel, par exemple, nécessite l'installation d'une extension Visual Studio payante. –