Domanda

Ho un servizio WCF basato su TCP self-hosted. Ora sto costruendo un progetto che consuma quel servizio, ma sembrano esserci almeno due modi per aggiungere un riferimento di servizio a un progetto ed entrambi producono proxy molto diversi. Per prima cosa ho usato " Aggiungi riferimento al servizio " dal menu del progetto, ma questo ha generato parecchi file e persino alcuni schemi XML dei principali tipi .Net. Poi ho provato SvcUtil che ha prodotto solo due file, un proxy e un file di configurazione che contiene i parametri di riferimento del servizio e di associazione, è molto meglio ma ...

In entrambi i casi gli strumenti VS sembrano riprodurre le definizioni dei tipi anche se ho fornito un riferimento all'assembly che contiene il servizio e tutti i tipi che utilizza. Ad esempio, alcuni dei miei metodi di servizio restituiscono raccolte generiche di classi Entity. Tutte le classi Entity sono definite all'interno di un assembly a cui ho fatto direttamente riferimento dal progetto di consumo, quindi perché ridefinire nuovamente quei tipi?

Sarei grato se qualche ente potesse offrire qualche consiglio sull'uso dei servizi WCF che restituiscono i tipi di entità e le migliori pratiche che seguono.

È stato utile?

Soluzione

Abbiamo scoperto che il riferimento al servizio di aggiunta crea un sacco di codice non necessario che ostacola più di quanto aiuti.

Siamo passati a un modo manuale per configurarlo, c'è un'introduzione a questo metodo qui:

http://perseus.franklins.net/dnrtvplayer/player.aspx ? ShowNum = 0103

Altri suggerimenti

Sì, nel tuo caso concreto questa può sembrare una duplicazione, ma considera questo: WCF è anche progettato per essere interoperabile e in MOLTI scenari, specialmente se hai un client non.NET che chiama il tuo codice, non lo farai disporre dell'assemblaggio con il contratto e le interfacce disponibili.

Quindi non c'è davvero nulla MA creare un proxy completo, che contenga tutte quelle informazioni, al fine di funzionare in tutte le circostanze possibili.

Ora se vuoi davvero evitare la duplicazione di contratti dati ecc., puoi compilarli nel loro proprio assembly, e quindi usare l'opzione / r: (nome assembly) quando chiami svcutil per dirgli di riutilizzare il codice e contratti in quell'assemblea.

Marc

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top