【发布时间】:2015-12-14 10:59:13
【问题描述】:
客户端和服务器在同一台机器上。
在服务器端,我在一个单独的线程中构建我的远程对象(它不是主线程):
Private _remoteObject as RemoteObject
...
'Just one time :
Dim tc as TcpChannel = New TcpChannel(1002)
ChannelServices.registerChannel(tc, false)
RemotingConfiguration.RegisterWellKnownServiceType(GetType(IRemoteObject), "RemoteServerObject", WellKnownObjectMode.SingleCall)
RemotingServices.Marshal(_remoteObject, "RemoteServerObject")
...
_remoteObject = new RemoteObject()
_remoteObject.RemoteOtherObjects.Add(New RemoteOtherObject(_property1, _property2))
客户端:
Private _remoteObject as Remoting.IRemoteObject
...
'One time
Dim tcpChannel As New TcpChannel()
ChannelServices.RegisterChannel(tcpChannel, false)
Dim _remoteObject as IRemoteObject
_remoteObject = Activator.GetObject(GetType(RemotingObject.IRemoteObject), "tcp://localhost:1002/RemoteServerObject")
While True
Thread.Sleep(1000)
Dim remoteOtherObject as IRemoteOtherObject = _remoteObject.GetRemoteOtherObjectByName("testName")
For Each property2 as IProperty2 In remoteOtherObject.Properties2
Console.WriteLine(property2.someting)
Next
End While
类RemoteObject的所有子对象都继承MarshalByRefObject。 客户端只看到RemoteObject(单独的dll)的接口。
我的问题是,在客户端的 each 循环中,我没有错误,它只是被锁定,我的 控制台正在响应,但没有写入任何内容。
关于这个问题的任何想法?
【问题讨论】:
-
还有什么可以改善我的问题:我尝试通过 Singleton 或 SingleCall,出现同样的问题。
-
看起来服务器没有给客户端获取对象的时间。
-
在客户端,我的对象被很好地检索,它们在透明代理表单上。将它们转换为真正的代理/对象似乎存在问题......
标签: vb.net multithreading remoting