Entsorgen Kanal erstellt von WCF ChannelFactory
Ich bin auf der Suche nach einem sauber die ChannelFactory erstellen Kanäle für mich mit dem Fähigkeit zu entsorgen nach dem Gebrauch.
Dies ist, was ich habe:
public class ClientFactory : IClientFactory
{
private const string endpointName = "IMyService";
private readonly ChannelFactory<IMyService> _factory;
public ClientFactory()
{
_factory = new ChannelFactory<IMyService>(endpointName);
}
public Client<IMyService> GetClient()
{
IMyService channel = _factory.CreateChannel();
return new Client<IMyService>(channel);
}
}
public class Client<T> : IDisposable
{
public T Channel { get; private set; }
public Client(T channel)
{
if (channel == null)
throw new ArgumentException("channel");
Channel = channel;
}
public void Dispose()
{
(Channel as IDisposable).Dispose();
}
}
//usage
using (var client = _serviceFactory.GetClient())
{
client.Channel.DoStuff();
}
Ist das eine gute Lösung?
Gibt es Reiniger Möglichkeiten, dies zu tun?
- Nicht über den Kanal, wie. Verwenden: try { Kanal.Close(); } catch (CommunicationException) { channel.Abort(); } catch (TimeoutException) { channel.Abort(); }
- Wie kommt das? Nicht Entsorgung Kanal das gleiche tun für mich?
- Entsorgen Sie werden in der Nähe nennen. In der Nähe auslösen könnte. Schreiben Sie alle Ihre mit Aussagen wie: try { using (...) { ... } } catch (CommunicationException) { } oder verwenden Sie mein Muster oben.
- Thx, wusste das nicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, es gibt keine sauberere Möglichkeit zum wickeln des Kanals.
Andere Weise, die Sie tun können, ist die Nutzung von Action/Func, statt. Es ist nicht sauberer, aber möglicherweise besser geeignet für Ihre Anwendung.
Dies ist, wie ich es mache:
Dann nutzen Sie den service wie
.?
was ich davon ausgehen, war ein misstake.Etwas zu tun:
Wenn Sie ein Kanal für das, können Sie es entsorgen.