2009-11-05 15 views
5

Sono in una fase di creazione di un servizio wcf per la mia applicazione che fornirà i prodotti .. Ho, il modello di dominio e il livello di persistenza sotto l'applicazione.Spostamento del livello di accesso ai dati al servizio WCF

Per il servizio, avrò bisogno anche di un modello di dominio e di un livello di persistenza simili. Non voglio duplicare le cose e non voglio condividere anche le librerie e accoppiare l'applicazione e il servizio.

Quindi questo mi fa pensare se dovrei creare un servizio separato (o implementare in questo nuovo che sto creando) il livello di accesso ai dati e utilizzare quel servizio per l'accesso ai dati dall'appicazione anche, quindi ci sarà solo un livello di accesso ai dati condiviso sia dall'applicazione che dal servizio

È un buon modello e ci sono grossi problemi che mi aspettano in fondo alla strada, in tal caso quale sarebbe il tuo suggerimento? Grazie!

risposta

1

Una volta ero nella stessa situazione. all'inizio durante lo sviluppo, non c'erano servizi di wcf per l'accesso ai dati disponibili, quindi ho usato Nhibernate per l'accesso ai dati. per facilitare il passaggio dall'accesso diretto ai servizi wcf per il recupero dei dati, ho avuto qualcosa del tipo:

client app -> Repository Interfaces -> Repository Implementations (inizialmente questo ha recuperato i dati tramite Nhibernate, la seconda implementazione tramite wcf).

con un'interfaccia che nasconde i dettagli di implementazione dal codice dell'applicazione potrebbe essere una soluzione adeguata per il tuo problema. (btw, il codice di accesso ai dati di Nhibernate è stato principalmente riutilizzato dal lato server, quindi non dovrai buttare via nulla).

+0

Questa è esattamente la mia situazione dato che sto anche utilizzando Nhibernate e ho le interfacce del repository e quindi le implementazioni del repository su una libreria separata.Ci sono esempi concreti là fuori che lo fa attraverso un servizio che potrei guardare? – kaivalya

+0

mi dispiace non posso darti accesso al nostro codice base. tuttavia, se accedi a un'interfaccia solo dall'app client, non devi preoccuparti dell'attuazione effettiva. quando si tratta di trasmettere entità nibernetiche tramite wcf, prendersi cura dei problemi di serializzazione con le raccolte pigro-caricate. wcf non ama i proxy nibernetici –

1

Se si dispone di servizi WCF come livello di accesso alle risorse, è possibile spostare il livello di accesso ai dati esistente lontano dall'applicazione client poiché il servizio Web WCF è l'endpoint per lo scambio di dati.

Al momento,

client App < -> database di Access

Questa è una cattiva pratica, espone il database pubblico e il porto di database potrebbe essere stato bloccato per impostazione predefinita.

con il servizio web,

client App < -> Servizi Web (accesso Database)

avrebbe dovuto implementazione di protezione appropriato (HTTPS e autenticazione). Il servizio Web è normalmente ospitato sulla porta amichevole 80 e non è necessario esporre il database sottostante pubblico.

+0

Questa è una cazzata. Non sai di cosa stai parlando. – DarthVader

-1

Penso che ci dovrebbe essere un solo livello di accesso ai dati nell'applicazione. Quindi, se crei un servizio e ottieni i dati da questo, rimuovi tutti i collegamenti diretti dal tuo cliente.

Ciò significa anche che non è necessario rendere pubblico il proprio database e inoltre la possibilità che qualcuno manomettere il database sia piuttosto bassa.

Problemi correlati