2009-10-28 2 views
5

Ritengo che questa sia una domanda stupida prima ancora di chiederlo, ma il mio cervello non sta funzionando troppo bene in questo momento. Ho due servizi WCF "CountryService" e "FloristService".Condividi oggetti DTO tra servizi WCF

Ora CountryService ha il seguente metodo:

IList<CountryDTO> GetAllCountries(); 

Inoltre, FloristService ha un metodo:

bool AddFlorist(FloristDTO florist); 

Tutto bene finora, ma il problema è che il FloristDTO fa riferimento a un CountryDTO cioè

public string Address1 { get; set; } 
    public string Address2 { get; set; } 
    public string Address3 { get; set; } 
    public string City { get; set; } 
    public string Postcode { get; set; } 
    public CountryDTO Country { get; set; } 
    public string Name { get; set; } 

Questo va bene, ma se utilizzo il proxy di servizio che genera util w con Visual Stuidos (es. Aggiungi riferimento> Aggiungi riferimento servizio) quindi ho due versioni di CountryDTO create i.e.FloristService.CountryDTO e CountryService.CountryDTO.

Ora riesco a pensare a qualche modo per superare questo, ma non sembra che abbiano ragione. Mi chiedevo quale fosse l'approccio "corretto" per questo, c'è qualcosa di funky che posso fare con lo strumento di generazione del proxy per farlo condividere DTO comuni?

Cheers, Chris

risposta

5
+0

Cheers, proprio quello che sto dopo – Owen

+0

In secondo luogo, questo sembra presupporre che sia il livello di servizio che il livello di consumo avranno accesso allo stesso file .dll con gli oggetti DTO. Ora, cosa succede se non lo ho, e VOGLIO che lo svutil generi le classi proxy. Ma voglio solo generarli una volta e condivisi tra i servizi? – Owen

+1

Quindi si generano le classi proxy una volta e riutilizzate le classi proxy generate tramite svcutil/r per la generazione successiva del proxy. –

0

articolo "How to reuse types across service endpoints" suggerisce sul lato client aggiornare manualmente Reference.svcmap per includere molteplici e NamespaceMappings.

In alternativa, svcutil consente di specificare più endpoint in una sola volta e di utilizzare i parametri/r (/ reference) e/n (/ namespace).