日期:2014-05-19  浏览次数:20706 次

关于Remoting的一个疑惑
先看代码:

TcpChannel   chan   =   new   TcpChannel();
ChannelServices.RegisterChannel(chan,true);
ServiceLib.ServiceClass   obj   =   (ServiceLib.ServiceClass)Activator.GetObject(
    typeof(ServiceLib.ServiceClass),   "tcp://localhost:8085/Service ");
if   (obj   ==   null)  
{
        System.Console.WriteLine( "无法定位服务器 ");
}
else
{
        //   调用方法两次
        Console.WriteLine( "服务器当前日期为1: "   +   obj.GetServerDateTime());
        Console.WriteLine( "服务器当前日期为2: "   +   obj.GetServerDateTime());
}


在调用Activator.GetObject方法时客户端并不创建任何到服务端的实际连接。
在第一次调用远程对象的GetServerDateTime方法时,客户端发现尚未建立连接于是会创建一个到服务器的连接,然后在此连接上执行方法传输数据。

问题:

在第一次调用完成后,到服务器的连接是否会关闭?
当第二次调用GetServerDateTime方法时,客户端是否会复用第一次调用时创建的连接?
如果不会复用,则每次调用都会先创建连接再关闭连接?
如果两次调用使用的是同一个连接,则这个连接能持续多长时间?什么时候会超时,我如何控制?

------解决方案--------------------
在第一次调用完成后,到服务器的连接是否会关闭?
当第二次调用GetServerDateTime方法时,客户端是否会复用第一次调用时创建的连接?
______________________________________________________

连接不会关闭,第二次调用GetServerDateTime方法时会复用第一次调用时创建的连接.

我理解你说的连接是指Socket连接.

以上所说来自我们对实际程序运行的观察,检测它的Socket连接情况.