Sei sulla strada giusta, direi ;-)
In sostanza, la creazione del proxy client WCF è un processo in due fasi:
- creare la channel factory
- dalla fabbrica di canale, creare il canale reale
Il passaggio n. 1 è piuttosto "costoso" in termini di tempo e sforzo necessari, quindi è sicuramente una buona idea farlo una volta e quindi memorizzare nell'istanza di ProjectWcfServiceFactory
da qualche parte nel codice.
Il passaggio 2 è in realtà piuttosto leggero e poiché un canale tra un client e un servizio può cadere in uno "stato di errore" quando si verifica un'eccezione sul server (e quindi deve essere ricreato da zero), il caching del canale reale di per sé è meno desiderabile.
Quindi il miglior prassi comunemente accettata sarebbe:
creare la ChannelFactory<T>
(nel tuo caso: ProjectWcfServiceFactory
) una volta e la cache per più a lungo possibile; fare questo sollevamento pesante solo una volta
creare l'attuale Channel
(qui: IProjectWcfService
) secondo necessità, prima di ogni chiamata. In questo modo, non c'è bisogno di preoccuparsi di controllare il suo stato e ricreare in base alle esigenze
UPDATE: "? Per quanto riguarda la chiusura del canale" chiede Burt ;-) Buon punto !!
La best practice accettata per questo è di avvolgere la vostra chiamata di servizio in un blocco try....catch....finally
. La parte più difficile è che, quando si smaltisce il canale, anche le cose possono andare male, quindi è possibile ottenere un'eccezione: ecco perché non è sufficiente racchiuderlo in un blocco using(....)
.
Quindi, in pratica si ha:
IProjectWcfService client = ChannelFactory.CreateChannel();
try
{
client.MakeYourCall();
}
catch(CommunicationException ce)
{
// do any exception handling of your own
}
finally
{
ICommunicationObject comObj = ((ICommunicationObject)client);
if(comObj.State == CommunicationState.Faulted)
{
comObj.Abort();
}
else
{
comObj.Close();
}
}
E, naturalmente, si potrebbe sicuramente piacevolmente avvolgere questo in un metodo o un metodo di estensione o qualcosa in modo da non dover digitare questo fuori ogni volta che si effettua un servizio chiamata.
UPDATE:
Il libro che consiglio sempre di alzarsi e correre in WCF rapidamente è Learning WCF da Michele Leroux Bustamante. Lei copre tutti gli argomenti necessari, e in un modo molto comprensibile e accessibile. Questo ti insegnerà tutto - nozioni di base, argomenti intermedi, sicurezza, controllo delle transazioni e così via - che devi sapere per scrivere servizi WCF utili e di alta qualità.
Learning WCF http://ecx.images-amazon.com/images/I/41wYa%2BNiPML._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_.jpg
Gli argomenti più avanzati e più approfondita un'occhiata a WCF sarà coperto da Programming WCF Services da Juval Lowy. Si immerge in tutti i dettagli tecnici e argomenti e presenta "la Bibbia" per la programmazione della WCF.
Programming WCF Services http://ecx.images-amazon.com/images/I/41H2u13a9bL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_.jpg
E la chiusura del canale? – Burt
Grazie, questo ha chiarito un po 'le cose, ho davvero bisogno di comprare un libro della WCF (qualsiasi raccomandazione sarebbe gradita). – Burt
Perché la cattura e, infine, essenzialmente le stesse cose, com.bj.Abort? È necessario interrompere la cattura? – Burt