2009-08-04 17 views
15

Quindi sto progettando un servizio WCF. Non ho esperienza con WCF e sto cercando di decidere se deve essere ospitato su IIS o su un servizio Windows personalizzato. O qualche altra opzione?Devo ospitare il mio servizio WCF in IIS?

Le cose da considerare:

  • Ha bisogno di caricare i dati da un database all'avvio.
  • È necessario mantenere questi dati tra le richieste, non caricarlo ogni volta.
  • È necessario elaborare più richieste contemporaneamente.
  • Deve essere il più configurabile possibile per quanto riguarda gli endpoint.
  • Chiamerà nativamente DLL native.

Sospetto che l'hosting in IIS semplificherebbe alcune cose, ma non sono sicuro che sarebbe una buona idea in questa situazione.

Quali sono le mie opzioni e quali sono i loro pro e contro?

risposta

16

è necessario guardare fondamentalmente a tre opzioni:

1) Hosting in IIS6 (Windows Server 2003/2003 R2): in questo scenario, è possibile ospitare solo protocolli HTTP - nient'altro. Questa è una vera e propria limitazione di per sé, non puoi usare ad es. netTcp per scenari Intranet.

2) Hosting in IIS7/WAS (Vista, Server 2008): questo offre più opzioni in termini di protocolli supportati e l'ambiente di hosting sembra inizialmente un vincitore.

3) Self-hosting: in questo scenario, sta totalmente a te fare tutto il necessario per ospitare ed eseguire i tuoi servizi.

Se si disattiva l'opzione # 1 per ora (se si dispone solo di IIS6, utilizzerei sempre l'auto hosting), è verso IIS7 rispetto all'hosting automatico.

IIS7 fornisce "attivazione su richiesta", ad es. il tuo codice di servizio non è in memoria in ogni momento, ma verrà caricato e istanziato una volta che arriva una richiesta. Questo può essere un vantaggio.

D'altra parte, l'hosting in IIS7/WAS ti priva della capacità di specificare i tuoi endpoint: il tuo endpoint e quindi l'indirizzo di servizio è la directory virtuale in cui risiede il tuo file "MyService.svc". Non puoi cambiarlo in alcun modo, forma o forma.

Self-hosting può sembrare un lavoro molto lungo, ma ti offre la massima flessibilità: puoi scegliere i protocolli a tuo piacimento, puoi impostare il tuo schema di indirizzamento nel modo che preferisci e hai controllo totale su ciò che viene fatto quando. È possibile introdurre il proprio ServiceHost personalizzato se è necessario fare del lavoro extra per ospitare i servizi e così via.

A meno che non stiate solo giocando un po 'con WCF, consiglierei e voterò sempre per l'auto-hosting - se è necessario che il servizio WCF sia sempre in esecuzione, all'interno di un servizio di Windows NT (questa è la soluzione migliore per ambienti di produzione) e, se si sta sviluppando/eseguendo il debug, è possibile ospitare completamente i servizi WCF in un'app console che è possibile avviare e interrompere a proprio piacimento.

Quindi, per farla breve: alla fine, se si vuole veramente controllare ciò che sta accadendo, consiglierei sempre il self-hosting.

Questo potrebbe cambiamento una volta che la nuova "Dublin" server-Addon da Microsoft viene fuori - qualche tempo dopo .NET 4 viene lanciato, probabilmente all'inizio del 2010 - ma questo è ancora troppo presto per dirlo.

Spero che questo aiuti.

Marc

+3

Conosci davvero la tua WCF. – Contango

+0

@Gravitas: grazie! Ho imparato dal Master WCF :-) (Juval Lowy) –

+0

Ciao, quasi 5 anni dopo, potresti aggiornare la tua risposta con l'ultima versione di WCF e IIS? Inoltre, pensi che le funzionalità di Windows Services Recycling siano efficienti come quelle di IIS? Grazie! – Nock

3

Direi che senza IIS7 e WAS non si può ospitare altro che endpoint basati su HTTP usando IIS. Come tale, molto probabilmente vorrai ospitare autonomamente per la flessibilità.

Per quanto riguarda le vostre considerazioni di dati, qualsiasi servizio può essere codificato con lo stato in modo tale che i dati vengono memorizzati nella cache, ecc

richieste multiple si richiede all'utente di utilizzare WCF concorrenza. Si desidera impostare attributi sul tuo host di servizio:

[System.ServiceModel.ServiceBehavior(UseSynchronizationContext = false, 
    InstanceContextMode = System.ServiceModel.InstanceContextMode.PerCall, 
    ConcurrencyMode = System.ServiceModel.ConcurrencyMode.Multiple)] 
public class MyService : IMyService 
{ 
} 

WCF è una grande bestia, vi consiglio di dare un'occhiata al libro e quant'altro si può mettere le mani su di Juval Lowy, non si impara in un giorno.

1

Forse un po 'fuori tema ma ne tiene conto quattro.

Se si finisce con l'auto hosting e si deve essere il più possibile "configurabili per quanto riguarda gli endpoint", si consiglia di dare un'occhiata a Managed Services Engine. MSE è un prodotto open source creato da Microsoft Services che ti consente di virtualizzare i tuoi servizi. Fondamentalmente, è un host WCF che utilizza i metadati dal proprio repository per esporre i servizi. Alcune funzionalità sono: supporto di versioni di servizi affiancate, abilitazione/disabilitazione delle operazioni sui servizi, possibilità di mappare le operazioni sugli endpoint, possibilità di applicare le politiche alle operazioni.

Non sono sicuro che soddisfi le tue esigenze ma vale la pena dare un'occhiata - soprattutto se devi essere estremamente configurabile.

+0

MSE è un po 'vecchio, non è vero? –

+0

Sì e no. L'ultima versione è stata maggio 2009, quindi è stata sviluppata attivamente. Ma dove si inserisce nella roadmap SOA, non sono sicuro (probabilmente da nessuna parte poiché è stato sviluppato da Microsoft Services). –

+0

Sono passati circa 2 anni tra le versioni, quindi ora dirò che è un po 'vecchio. :) –

Problemi correlati