2012-04-18 11 views
5

Attualmente disponiamo di un'applicazione .NET 4 costituita da Windows Service in esecuzione in background e client locali o remoti (solo 1-3 in genere).Scelta migliore per server self hosting robusto: WCF contro ASP.NET Web Api

I client dispongono di una GUI WPF e necessitano di alcuni dati dal servizio Windows. Pertanto, utilizziamo WCF con l'associazione NamedPipe per un client locale e l'associazione NetTcp per i client remoti. Funziona, ma spesso abbiamo problemi con endpoint non raggiungibili (canale guasto o non trovato ecc.). Proviamo già a ricostruire le connessioni malfunzionanti, ma sembra essere piuttosto fragile ...

Ora immettere Web Api: sembra uno stack basato su HTTP potrebbe essere più robusto (nessun canale, nessun punto finale, può essere auto-ospitato in anche il servizio Windows). Sembra che non ci siano problemi con i canali danneggiati perché ogni richiesta viene gestita individualmente. Quindi se qualcosa fallisce, basta ripetere la richiesta. (E abbiamo esperienza con ASP.NET MVC da altre app, quindi questo non è nuovo per noi).

Ora stiamo pensando a quale potrebbe essere la nostra migliore scommessa. È meglio "indurire" il nostro servizio WCF esistente (un'interfaccia di servizio con circa 15 operazioni) o spostare l'interfaccia su Web Api ed eseguirla come richieste HTTP (con dati JSON)? Le prestazioni non sono il nostro problema principale qui ...

Qualche idea? Hartmut

risposta

4

Si consiglia di attenersi ai servizi WCF (SOAP) per l'applicazione WPF anziché passare all'API Web. Ci sono una serie di ragioni per questo. Innanzitutto penso che dobbiamo considerare che cosa sta cercando di affrontare la nuova API Web, ovvero fornire un framework per supportare i servizi RESTful/HTTP/hypermedia. È probabile che questo sia adatto per la creazione di applicazioni che fanno un uso pesante di HTTP come applicazioni web, mobili e JavaScript, dove si desidera massimizzare la "portata" o l'interopability dei propri servizi (indipendentemente dalla piattaforma). Questo non vuol dire che non puoi usarlo per i client WPF, ma nel tuo caso, dove tutto il traffico è locale per il tuo dominio, ha più senso attenersi all'attuale implementazione.

Le scelte vincolanti che hai fatto per i tuoi servizi/clienti mi sembrano ok. Mi concentrerei sul perché i vostri canali sono inefficienti e risolvono questi problemi. Potresti anche prendere in considerazione l'idea di ospitare i tuoi servizi tramite IIS e utilizzare WAS per esporre i tuoi endpoint non HTTP. Ho avuto molto successo con questo in passato e per la maggior parte è stato abbastanza stabile. Elimina anche alcuni dei mal di testa con la gestione del tuo host. Se si è preoccupati degli errori di binding TCP, è sufficiente creare un nuovo endpoint HTTP o wsHTTP e utilizzarlo. Ciò fornirà esattamente lo stesso trasporto che l'API Web utilizza senza dover modificare il modello di programmazione.

+0

Ti dispiacerebbe aggiornarci se ancora WebAPI con hosting autonomo è una scelta migliore rispetto a WCF ospitato autonomamente. –