2009-08-11 1 views
17

Attualmente sto implementando un'applicazione Silverlight utilizzando WCF per la comunicazione tra client e server. Ho sentito che usando WCF siamo obbligati ad usare una certa tecnologia Microsoft sul lato client, e non possiamo facilmente sostituirlo con "nulla" - almeno con l'implementazione SOAP predefinita di WPF.Alternative a WCF

Quindi le mie domande sono:

  • E 'vero?
  • E i servizi WCF riposanti? Immagino una semplice implementazione REST e qualsiasi client potrebbe comunicare con questo lato server tramite REST. Sì? No?
  • Quali sono le (buone) alternative per eliminare la WCF? E perché dovrei farlo?

risposta

10

Ho sentito dire che utilizzando WCF siamo tenuti utilizzare una tecnologia Microsoft al lato client

Bene, allora hai mentito!

Molti fornitori e librerie open source supportano SOAP: è uno standard W3C, non un'idea specifica di Microsoft.

Un'ottima alternativa per un servizio RESTful è ASP.NET MVC, che ho trovato un modo molto semplice per esporre i metodi direttamente come URL.

+0

Oh, beh, questa è una buona cosa allora. So che SOAP non è specifico per MS, quindi non ho davvero capito perché WCF con SOAP ci legherebbe a Microsoft. Grazie per chiarire questo! E SOAP viene utilizzato per impostazione predefinita durante la creazione di un servizio WCF, giusto? – stiank81

+0

Dal nome "ASP .NET MVC" sembra qualcosa che in genere si utilizza in - bene - un'applicazione ASP .NET. Certo, il mio Silverlight è racchiuso in ASP, ma conterrà la mia app Silverlight altrettanto bene che per un'applicazione ASP? – stiank81

+0

No e sì;). Devi specificare esplicitamente l'associazione/i. Quindi - devi scegliere, quindi, la parola "default" non va bene qui, d'altra parte, non devi girare nessuna opzione magica da qualche parte, è una tua scelta. –

1

per Java - WCF interopibility controllare di Sun Progetto Tango link

+0

Thx - lettura utile! – stiank81

3

WCF ti dà un livello di astrazione sopra il modo in cui sei/desidera comunicare. Quindi, puoi scegliere l'associazione specifica di Microsoft, ma puoi anche utilizzare il protocollo SOAP o, se lo usi entrambi, così il client non Microsoft sarà in grado di comunicare attraverso fe. SOAP e altri client possono utilizzare metodi più robusti.
Come per REST, si potrebbe voler guardare il discorso di Hanselman su NDC here. Potrebbe non rispondere direttamente alla tua domanda, ma potrebbe farti notare qualcosa.
Per quanto riguarda le alternative, non vedo nulla che possa essere eseguito su .NET, oltre ai servizi Web (ma, poiché WCF offre tutto questo e molto altro, preferirei considerarlo come un modo più vecchio, che reale come alternativa) .

+0

Thx! Verificherà il discorso di Hanselman (link corretto: http://media01.smartcom.no/microsite/asx.aspx?eventid=4499). Bene - se WCF non mi vincola a Microsoft sono contento. Prenderò in considerazione la possibilità di passare a REST anche se ... Sento che spesso sono preferito a SOAP in questi giorni - ma potrei sbagliarmi? – stiank81

+1

REST è più alla moda al momento. SOAP è eccessivo per la maggior parte delle applicazioni. L'XML non è adatto per rappresentare comunque i dati gerarchici. SOAP/WSDL è un gigantesco pasticcio di uno standard, che incorpora lo standard XML Schema (che incorpora uno standard di espressioni regolari dal consorzio Unicode). Rispetto a tutto ciò, REST è quasi nulla, fondamentalmente solo HTTP. Eppure è più capace del SOAP di base (ad esempio è possibile restituire un'immagine come flusso binario). –

+1

Non mi sento abbastanza forte in questo campo per rispondere a questa domanda, ma so una cosa, che Hanselman ha menzionato lì - quelle tecnologie sono grandi per le app client ecc., Ma a volte, l'intera idea di ottenere (spesso) dati binari e metterli come testo all'interno di parentesi può essere un sovraccarico eccessivo. In WCF mi piace il fatto di poter scrivere una volta la logica (implementazioni dei contratti) e quindi accedervi in ​​molti modi con facilità. –

4

WCF è basato su SOAP (per impostazione predefinita, supporta anche REST) ​​e può facilmente interagire con qualsiasi client in grado di comprendere e parlare SOAP.

Questi includono lingue e sistemi come Java, PHP e molti altri ancora.

WCF è l'implementazione di Microsoft, ma gli standard sono tutti standard internazionali e interoperabili. Nulla sugli standard è specifico per Mircosoft.

Marc

+2

Tutti dicono che WCF non mi lega a Microsoft :-) Buono a sapersi - ovviamente sono stato falsamente informato .. Thx! – stiank81

+3

Mentre suona molto bene "sulla carta", in realtà ci sono ancora molti piccoli ma fastidiosi problemi con l'interopzione ... – Ray

+0

Si prega di approfondire i "piccoli ma fastidiosi problemi di interoperabilità". Altrimenti, sei cattivo come le persone che hanno detto al PO che WCF lo legherebbe a Microsoft. –

15

io sono parte del core team che mantiene ServiceStack - un'alternativa matura Open Source per WCF: moderno, in codice prima, model-driven, WCF sostituzione servizi web-quadro per la creazione di encouraging code and remote best-practices terse, SECCO , high-perfomance, scalable REST web services.

Ha il supporto automatico JSON, JSONP, CORS intestazioni e modulo-urlencoded/multipart-formdata. Le demo online sono un buon inizio da guardare dato che usano tutti Ajax.

Inoltre, non c'è nessuna configurazione XML, o il codice-gen e la tua 'write-once' servizio di C# web fornisce tutte le JSON, XML, SOAP, JSV, CSV, HTML endpoint abilitati out-of-the-box, automaticamente con ganci per collegare il proprio Content Types se necessario .

Include inoltre generic sync/async service clients che fornisce un gateway di comunicazione client/server veloce, tipizzato end-to-end.

Questa è l'esempio completo di tutto il codice necessario per creare un semplice servizio web, cioè automaticamente senza alcuna configurazione, registrato e messo a disposizione su tutto il 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 }; 
    } 
} 

Sopra il servizio può essere chiamato (senza build-passi/code-gen) in C# con la linea di seguito:

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

E in jQuery con:

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

Hai menzionato questo come 'Open Source'. Questo sembra un prodotto commerciale (anche se dai una versione 'lite' gratuitamente). Il codice sorgente è disponibile in Github? –

+0

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

+0

Questo è "Openware", il codice stesso è open source, ma è difficile da usare senza pagare per la versione "Pro". Il tutorial, ad esempio, richiede l'installazione di un'estensione di Visual Studio a pagamento. –