我在两台计算机上有两个应用程序。这些应用程序通过.NET Remoting进行通信。 第一个应用程序充当访问数据库的服务器,第二个应用程序充当客户端并将该数据写入另一个数据库。
当我的客户端在服务器上的远程对象上调用某个方法时,出现以下错误:
连接尝试失败,因为连接方没有 在一段时间后正确回应,或建立连接 失败,因为连接的主机无法响应 192.168.200.60:31621
嗯,这很好,但我对IP地址192.168.200.60一无所知,我正在连接到172.XXX.XXX.216。似乎有两个网络连接,它在某种程度上不利于远程连接。
我的服务器上的 ipcongif
看起来像这样:
完全相同的解决方案适用于另外3台装有Windows 2000,Windows XP和Windows 7的计算机。服务器是在.NET Framework 2.0中开发的。
客户端和服务器具有通用DLL库,具有两个接口ICAOFactory和ICAO。首先我创建工厂CAOFactory,它有方法CreateCAO,它返回CAO对象。当我把某个方法称为ICAO对象时,它就失败了。
这是我的服务器应用程序注册远程处理对象的方式:
TcpChannel channel = new TcpChannel(31621);
ChannelServices.RegisterChannel(channel, false);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(My_Server.CAOFactory), "My_Server", WellKnownObjectMode.Singleton);
这是我的客户端创建远程对象的方式:
My_Share.ICAOFactory srvFactory;
My_Share.ICAO srvCAO;
srvFactory = (My_Share.ICAOFactory)Activator.GetObject(typeof(Foerster_Share.ICAOFactory), "tcp://" + ip + ":" + port + "/My_Server");
srvCAO = srvFactory.CreateCAO(); // no problem
srvCAO.Init(dateTime); // problem
这是我的CAOFactory对象:
public class CAOFactory : MarshalByRefObject, ICAOFactory
{
public ICAO CreateCAO()
{
ICAO CAOObj = new CAO();
return CAOObj;
}
public void GetClientCount(out long clientCountSum, out long clientCountMax, out long clientCountActive)
{
clientCountSum = 0;
clientCountMax = 0;
clientCountActive = 0;
return;
}
public override object InitializeLifetimeService()
{
return null;
}
}
这是我的CAO对象:
public class CAO : MarshalByRefObject, ICAO
{
public void Ping()
{
return;
}
DateTime dtInit;
public void Init(DateTime dt)
{
dtInit = dt;
}
// + some other methods
}
任何帮助都非常感谢!
答案 0 :(得分:0)
您定位的是哪个版本的.NET?
我认为您需要使用TcpChannel类https://msdn.microsoft.com/en-us/library/bb187434(v=vs.85).aspx的bindTo属性来告诉您的服务器绑定到正确的NIC。这可能是配置中最容易完成的。您的服务器项目是否有app.config?如果没有添加一个然后添加这样的部分(这是从这个问题.Net Remoting: Indicate which local interface to use to connect to one server复制/粘贴)
<configuration>
<system.runtime.remoting>
<application>
<channels>
<channel ref="tcp" port="0" bindTo="172.xxx.xxx.xxx" />
</channels>
</application>
</system.runtime.remoting>
</configuration>
这将告诉服务器绑定到特定的IP地址。
答案 1 :(得分:0)
重新排序网络连接优先级对我的情况有帮助。
http://ecross.mvps.org/howto/change-network-connection-priority-in-windows-10.htm