WCF的客户端不能在Using中使用。
Using的实现原理是:
try{
// 代码
}
finally{
obj.Dispose();
}
而Dispose方法内部调用的是Close方法。
对于WCF而言,其客户端的close方法是可以引发异常的,
close方法不是强制关闭。从而导致dispose方法可以在finally语句块中被不安全调用。抛出不可预知的异常,即便捕获异常,仍有可能一直保持着链接。
对于WCF服务的调用,一般使用try~ catch
try中执行服务调用,调用完成使用close关闭
catch中,执行Abort方法进行强制关闭。
static void Main(string[] args)
{
//使用终结点的配置名称初始化
var factory = new ChannelFactory<IHelloService>("HelloService");
//创建客户端
var client = factory.CreateChannel();
try
{
Console.WriteLine(client.SayHello());
factory.Close();
}
catch (Exception)
{
factory.Abort();
throw;
}
Console.ReadKey();
}
因此wcf调用需要注意以上点。