首页 新闻 会员 周边

为什么Console.Read()能造成这种现象?

0
[已解决问题] 解决于 2010-07-22 18:03

遇到了这样一个问题,谁能解释一下是什么回事?

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。

智会超的主页 智会超 | 初学一级 | 园豆:1
提问于:2010-07-22 17:42
< >
分享
最佳答案
1

因为Console.Read()诸塞主线程.

在 using 内部,它可以阻止程序继续执行 ServiceHost.Dispose();

你放在 using 外部,那么 ServiceHost.Dispose() 就已经被执行了,自然你的服务就已经离线了,所以客户端无法连接到你的服务.

Launcher | 高人七级 |园豆:45045 | 2010-07-22 17:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册