Domanda

sto consumando un servizio WCF e ha creato il suo proxy utilizzando il riferimento al servizio VS 2008.

Sto cercando il miglior modello di chiamare il metodo servizio WCF

  • Devo creare l'istanza proxy client ogni volta che io chiamo il metodo del servizio e chiudere il client non appena mi sono fatto con questo? Quando ho fatto il profilo la mia applicazione client, ho potuto vedere che si sta prendendo molto tempo per ottenere il canale durante l'inizializzazione del client proxy
  • Dovrei usare un pattern Singleton per il proxy client in modo che posso usare l'unica volta istanza e sbarazzarsi del re-inizializzazione in testa? C'è qualche problema nascosto con questo approccio?

Sto usando .NET Framework 3.5 SP1, vincolante basicHttp con poca personalizzazione.

È stato utile?

Soluzione

Dipende; -)

Se si dispone di una sequenza nella vostra applicazione che richiede diverse chiamate dopo l'uno con l'altro, si potrebbe appendere al client proxy e continuare a utilizzarlo per effettuare ulteriori chiamate. Attenzione però per verificare lo stato "in errore" - se si verifica un errore sul server, il canale tra il proxy client e il server potrebbe "colpa", e quindi il proxy client diventa inutilizzabile

.

Inoltre - la parte costosa è la creazione del ChannelFactory<T> - si potrebbe provare a separare questi due passaggi quando si crea il tuo proyx cliente in codice:

ChannelFactory<IYourService> factory = new ChannelFactory<IYourService>();

aggrapparsi a quella fabbrica di canale, per esempio memorizzare nella cache da qualche parte

Il secondo passo dovrebbe essere molto meno intenso in termini di tempo e di potenza:

IYourService client = factory.CreateChannel();

Si potrebbe fare questo passo prima di ogni chiamata (o sequenza di chiamata) e non dovrebbe ottenere brutta prestazione fuori da quella, davvero.

che vi consiglio vivamente di evitare single quando possibile - è come aprire un vaso di Pandora, non farlo a meno che non assolutamente, ha positivamente (ad esempio, per gestire l'accesso a una singola risorsa che è disponibile solo per un chiamante in un tempo).

Marc

Altri suggerimenti

Ci scusiamo per sollevando una vecchia questione, ma ho voluto aggiungere questo per una facile consultazione.

Sono pienamente d'accordo con marc_s e rally25rs. Quindi cominciare da lì, ma anche considerare l'utilizzo di un proxy o un wrapper che gestisce gli stati di errore. Ecco una domanda su SO che discute alcune soluzioni e qui è un'altra buona soluzione mi sono imbattuto su Internet da Corneliu , " costruzione di un proxy ClientBase riutilizzabile ". La sua soluzione genera wrapper che espongono i metodi di servizio per la massima praticità e prestazioni. Devo ancora provare se funziona però:).

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