我正在使用.Net Remoting并尝试访问服务器中修改的远程对象,这里是对象def: 我的想法是,我在服务器上创建的MRB对象返回到客户端,并在客户端调用getString()时打印出“Set On Server”。
我现在得到的是客户端上的空字符串,因此在客户端上调用new时,MRB对象不会发送到客户端。 对不起所有不同的班级等,但这是唯一的方法,我尽可能地修剪。
我真正想要的是在运行时在客户端上打印“设置在服务器上”。
using System;
using System.Runtime.Remoting.Lifetime;
namespace RemoteType
{
public class MyRemoteObject : System.MarshalByRefObject
{
private string sharedString;
public string getString()
{
return sharedString;
}
public void setString(string value)
{
sharedString = value;
}
public MyRemoteObject()
{
Console.WriteLine("MyRemoteObject Constructor Called");
}
public override object InitializeLifetimeService()
{
return null;
}
public string Hello()
{
return "Hello, Welcome to .Net Remoting !";
}
}
知道这是服务器:
using System;
using System.Runtime.Remoting;
using RemoteType;
namespace SimpleServer
{
class SimpleServer
{
public static MyRemoteObject MRB = null;
static void Main(string[] args)
{
RemotingConfiguration.Configure("RemotingAppServer.exe.config");
MRB = new MyRemoteObject();
MRB.setString("Set on the server");
Console.WriteLine(MRB.getString());
RemotingServices.Marshal((MRB), "MyRemoteObject");
Console.WriteLine("Press return to exit");
Console.ReadLine();
}
}
.NET Remote Config App.Config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.runtime.remoting>
<application>
<channels>
<channel ref="tcp" port="8000" />
</channels>
<service>
<wellknown mode="Singleton"
type="RemoteType.MyRemoteObject, RemoteType"
objectUri="MyRemoteObject" />
</service>
</application>
</system.runtime.remoting>
</configuration>
最后是客户:
using System;
using System.Runtime.Remoting;
using RemoteType;
namespace SimpleClient
{
class SimpleClient
{
static void Main(string[] args)
{
RemotingConfiguration.Configure("RemoteClient.exe.config");
MyRemoteObject robj = new MyRemoteObject();
Console.WriteLine(robj.Hello() + " " + robj.getString());
Console.ReadLine();
}
}
}
它的配置也是:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.runtime.remoting>
<application name = "SimpleClient">
<client>
<wellknown
type="RemoteType.MyRemoteObject,RemoteType"
url="tcp://localhost:8000/MyRemoteObject"/>
</client>
<channels>
<channel ref="tcp" port="0"/>
</channels>
</application>
</system.runtime.remoting>
</configuration>
答案 0 :(得分:2)
我测试了你的代码并且工作得很好。我确实设置了三个项目,一个是服务器,另一个是客户端,第三个是服务器和客户端共享的远程对象。 在远程app.config中,您可以删除已知条目,因为您已经通过代码对其进行编组。
答案 1 :(得分:0)
您确定应用程序结束后您的套接字会立即关闭吗?
如果快速测试多次,可能会导致tcp通信问题
答案 2 :(得分:0)
防火墙是否可以阻止环境中的tcp端口8000?您可以尝试切换到http作为测试。