Sie auf dem richtigen Weg ist, dann würde ich sagen ;-)
Grundsätzlich die WCF-Client-Proxy-Erstellung ist ein zweistufiger Prozess:
- schaffen die Kanalfactory
- aus dem Kanal-Fabrik, erstellen der eigentlichen Kanal
Schritt 1 ist ziemlich "teuer" in Bezug auf Zeit und Aufwand - also ist es definitiv eine gute Idee, dies einmal zu tun und dann die Instanz von ProjectWcfServiceFactory
irgendwo in Ihrem Code zwischenzuspeichern.
Schritt # 2 ist eigentlich ziemlich leicht, und da ein Kanal zwischen einem Client und einem Dienst in einen "fehlerhaften Zustand" fallen kann, wenn eine Ausnahme auf dem Server passiert (und dann von Grund auf neu erstellt werden muss), Zwischenspeichern des tatsächlichen Kanals an sich ist weniger wünschenswert.
So ist die allgemein akzeptierte Best Practice wäre:
die ChannelFactory<T>
(in Ihrem Fall: ProjectWcfServiceFactory
) erstellen, sobald es wie möglich, so lange zwischenzuspeichern; Tun Sie das schwere Heben nur einmal
Erstellen Sie die tatsächlichen Channel
(hier: IProjectWcfService
) nach Bedarf, vor jedem Anruf. Auf diese Weise müssen Sie sich keine Sorgen um seinen Zustand überprüft und es je nach Bedarf
UPDATE neu zu erstellen: „? Was ist das Schließen des Kanals“ fragt Burt ;-) Guter Punkt !!
Die empfohlene bewährte Vorgehensweise besteht darin, Ihren Serviceanruf in einen try....catch....finally
-Block zu verpacken. Der schwierige Teil ist: Wenn man den Kanal entsorgt, können auch Dinge schiefgehen, so dass man eine Ausnahme bekommen kann - deshalb ist es nicht ausreichend, sie in einen using(....)
Block zu wickeln.
Also im Grunde haben Sie:
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();
}
}
Und natürlich könnte man auf jeden Fall das schön einpacken in ein Verfahren oder eine Erweiterungsmethode oder etwas, um diese nicht zu haben, jedes Mal wenn Sie einen Dienst machen tippen Anruf.
UPDATE:
Das Buch empfehle ich immer aufstehen und schnell in WCF läuft Learning WCF von Michele Leroux Bustamante. Sie deckt alle notwendigen Themen ab und ist verständlich und zugänglich. Dadurch lernen Sie alles - Grundlagen, Zwischenthemen, Sicherheit, Transaktionskontrolle usw. -, die Sie benötigen, um hochwertige, nützliche WCF-Dienste zu schreiben.
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
den fortgeschritteneren Themen und mehr in eingehenden Blick auf WCF wird von Programming WCF Services von Juval Löwy abgedeckt werden. Er taucht in alle technischen Details und Themen ein und präsentiert "die Bibel" für die WCF-Programmierung.
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
Wie wäre es, den Kanal zu schließen? – Burt
Danke, das hat die Dinge ein bisschen aufgeräumt, ich muss wirklich ein WCF-Buch kaufen (irgendwelche Empfehlungen wären willkommen). – Burt
Warum ist der Haken und letztlich im Wesentlichen die gleichen Dinge tun, d. H. ComObj.Abort? Muss der Fang abgebrochen werden? – Burt