请教WCF客户端代理类的资源释放问题

iamseakingii 2010-07-22 03:10:29
请教一下 ChannelFactory<T>.CreateChannel() 创建出来的怎么能安全,方便的释放资源?
目前我是做了一个封装,然后:

using(var client = new Client<IMyService>())
{
//调用

}

这样来释放,但总感觉使用 using 很累也不好看.请问 ChannelFactory<T>.CreateChannel() 创建出来的需要保证释放一定要释放掉吗?有没有更方便有效的办法?

下面是Client代理类的大致方法:





public class Client<T> : IDisposable
{
private readonly T client;

public Client()
{
var factory = new ChannelFactory<T>();
client = factory.CreateChannel();
}


public void Dispose()
{
if (disposed) return;

try
{
var c = client as ICommunicationObject;
if (c != null)
{
CloseConnection(c);
}


}
catch (Exception ex)
{
Debug.WriteLine("Client dispose error:" + ex.Message);
}

disposed = true;

}


public static void CloseConnection(ICommunicationObject myServiceClient)
{
if (myServiceClient.State != CommunicationState.Opened)
{
return;
}
try
{
myServiceClient.Close();
}
catch (CommunicationException ex)
{

myServiceClient.Abort();
}
catch (TimeoutException ex)
{
myServiceClient.Abort();
}
catch (Exception ex)
{
myServiceClient.Abort();
throw;
}
}


}





...全文
267 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dreamkt 2010-07-28
  • 打赏
  • 举报
回复
很漂亮啊,哪不好看了?
gnefuil 2010-07-22
  • 打赏
  • 举报
回复
既然是IDisposable,那么就要显式地调用Dispose()去释放资源。using会自动调用这个函数,我觉得比自己手动调用好看多了
justfortemp 2010-07-22
  • 打赏
  • 举报
回复
只是帮顶

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧