遇到了这样一个问题,谁能解释一下是什么回事?
WCF宿主程序是一个控制台程序,代码如下
static void Main(string[] args)
{
//HostingServiceViaCode();
using (ServiceHost calculatorServiceHost = new ServiceHost(typeof(CalculatorService)))
{
calculatorServiceHost.Opened += delegate { Console.WriteLine("Calculator Service begin to listen via the Address:{0}", calculatorServiceHost.BaseAddresses[0].ToString()); };
calculatorServiceHost.Open();
Console.Read();
}
}
运行宿主程序,开启服务。运行客户端程序,正常。
可当我把Console.Read();移到Using语句的外面,如下:
static void Main(string[] args)
{
//HostingServiceViaCode();
using (ServiceHost calculatorServiceHost = new ServiceHost(typeof(CalculatorService)))
{
calculatorServiceHost.Opened += delegate { Console.WriteLine("Calculator Service begin to listen via the Address:{0}", calculatorServiceHost.BaseAddresses[0].ToString()); };
calculatorServiceHost.Open();
}
Console.Read();
}
再运行客户端程序,结果报一下错误:
Message:无法连接到 http://localhost:8889/GeneralCalculator。TCP 错误代码 10061:
由于目标计算机积极拒绝,无法连接。 127.0.0.1:8889。
因为Console.Read()诸塞主线程.
在 using 内部,它可以阻止程序继续执行 ServiceHost.Dispose();
你放在 using 外部,那么 ServiceHost.Dispose() 就已经被执行了,自然你的服务就已经离线了,所以客户端无法连接到你的服务.