Ich suche eine saubere Art und Weise die zu haben Channel Kanäle für mich schaffen mit der Fähigkeit, sie nach Gebrauch zu entsorgen.
Das ist, was ich habe:Entsorgen Playlist erstellt von WCF Channel
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 sauberere Möglichkeiten, dies zu tun?
Sie den Kanal so nicht entsorgen. Verwenden Sie: {channel.Close(); } catch (CommunicationException) {channel.Abort(); } catch (TimeoutException) {channel.Abort(); } – adrianm
Wie kommt es? Gibt es nicht den gleichen Kanal für mich? – David
Dispose wird Close aufrufen. Close könnte werfen. Schreibe alle deine using-Anweisungen als: try {using (...) {...}} catch (CommunicationException) {} oder benutze mein Muster oben. – adrianm