2010-09-03 6 views
5

Sto cercando di creare un servizio WCF di query di dati su una connessione lenta via satellite e mi piacciono molto i servizi dati WCF. Il problema che vedo è che HTTP è un formato molto prolisso e dal momento che tutto ciò che sto facendo è interno e .NET, è possibile utilizzare NetTcpBinding invece di ridurre parte del sovraccarico?È possibile utilizzare i servizi dati WCF (ne OData, ne Astoria, ne ADO.NET Data Service) con NetTcpBinding?

È possibile? Consigliabile?

risposta

3

No, i servizi dati WCF sono basati su REST e REST stesso è molto intimamente e completamente basato sui verbi HTTP come GET, PUT, POST ecc. - non è possibile eseguire quelli su NetTcp, poiché quelli sono intrinsecamente legati allo stack del protocollo HTTP.

Forse ci sono altre opzioni per ridurre i dati trasmessi? Modifica i tuoi oggetti - taglia il grasso, se puoi - sia sul numero di righe recuperate contemporaneamente sia sul numero di attributi/campi dati trasmessi. Questo è probabilmente il tuo approccio più promettente.

+0

Mentre è tecnicamente possibile creare un host personalizzato, OData è troppo legato a HTTP per renderlo fattibile. Peccato ... avere un servizio OData con connessioni persistenti sarebbe bello. –

4

Durante la ricerca di questo da solo, ho incontrato il MSDN article on Self-Hosted WCF Data Services. Questo articolo rileva che è possibile ospitare il servizio con DataServiceHost che richiede comunque HTTP (derivato da WebServiceHost).

Ma è anche possibile eseguire il rollover del proprio host utilizzando IDataServiceHost. Ecco un estratto dell'articolo di MSDN:

Per i casi in cui l'applicazione WCF ospite è troppo restrittivo, si può anche definire un host personalizzato per un servizio di dati . Qualsiasi classe che implementa l'interfaccia IDataServiceHost può essere utilizzata come host di rete per un servizio dati . Un host personalizzato deve implementare l'interfaccia IDataServiceHost ed essere in grado di gestire i seguenti responsabilità di base del dell'ospite servizio dati:

  • fornire il servizio dati con il percorso principale del servizio.
  • Elaborazione delle informazioni delle intestazioni di richiesta e risposta sull'appropriata implementazione del servizio IDataServiceHost .
  • Gestire le eccezioni sollevate dal servizio dati.
  • Convalida i parametri nella stringa di query.

L'articolo sembra suggerire che la SM ha correttamente segrated responsabilità dei dati-service dalle responsabilità di interfaccia di rete. Se è così, allora dovrei essere in grado di scrivere un NetTcpDataServiceHost. Qualcuno ha mai scritto un IDataServerHost? Eventuali suggerimenti?

+0

IDataServiceHost richiede comunque l'HTTP, vero? –

+0

Sono curioso Simon - hai trovato una buona soluzione per fornire le funzionalità di interrogazione personalizzabili di WCF Data Services in una configurazione WCF/TCP? –

+1

Non in senso positivo. Ho implementato un sottoinsieme dello schema URI OData di cui avevo bisogno per il mio servizio e l'ho fatto su net.tcp, ma non è veramente un servizio OData. Potresti provare a guardare ODataLib su CodePlex ... questa è l'implementazione open source di Microsoft del core del servizio OData.Ad un certo punto spero di guardare questo e vedere cosa può essere raccolto, ma gli orari del progetto si aprono rapidamente. Sai com'è. –

Problemi correlati