Ich benutze .Net Remoting und versuchen, auf ein Remote-Objekt im Server geändert zugreifen, hier ist das Objekt def: Die Idee ist, dass das MRB-Objekt, das ich auf dem Server erstellen , wird an den Client zurückgegeben und "Set On Server" wird ausgedruckt, wenn getString() auf dem Client aufgerufen wird.Problem mit .Net Remoting (C#)
Was ich jetzt bekomme, ist eine Null-Zeichenfolge auf dem Client, so dass das MRB-Objekt nicht an den Client gesendet wurde, wenn neu auf dem Client aufgerufen wurde. Entschuldigung für die verschiedenen Klassen usw., aber es ist die einzige Möglichkeit, ich habe so viel wie möglich getrimmt.
Was ich wirklich will, ist für "Set auf dem Server" gedruckt auf dem Client beim Ausführen.
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 !";
}
}
hier wissen, ist der Server:
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();
}
}
und .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>
schließlich der Kunde:
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();
}
}
}
Und sein Konfiguration auch:
<?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>
Haben Sie auf dem Client "Set on the server" angezeigt, wenn der Client ausgeführt wird? – daniel
@daniel: Haben Sie das Projekt so eingerichtet, dass Server und Client gleichzeitig gestartet werden? Wenn ja, könnte das Hinzufügen eines Thread.Sleep am Anfang des Client-Codes hilfreich sein. –
Ja, ich sah "Auf dem Server setzen" in beiden Bildschirmen Client und Server. Ich hatte zwei Lösungen, eine für Server und eine für Client. Ich habe zuerst den Server gestartet und dann den Client viele Male gestartet, alle mit dem gleichen erfolgreichen Ergebnis. – jmservera