Ich remote gerade zum ersten mal und ein wenig klappt es, aber ich bin auf
Problem gestossen das ich mir nicht erklären kann. Es hat wohl was mit den Channels zu tun.
Ich habe eine normale Anwendung die ein Objekt als Singleton zur Verfügung stellt auf dem localhost. Eine Client holt sich nun einen Verweis auf dieses Objekt, genau genommen wohl eigentlich einen Proxy wovon man allerdings nix mitbekommt. Es klappt ja auch soweit..
Mein RemoteObject:
Mein Server:
Mein Client:
Was ist nun das Problem ?
Wenn ich auf dem RemotingObject eine primitive Methode aufrufe klappt das.
myRemoteObject.HelloMethod("Das ist ein Test");
// Klappt ganz wunderbar
Wenn ich versuche auf ein Member des RemoteObjects direkt zuzugreifen,
geht die Sache ordentlich schief.
string s = myRemoteObject.myClassObject.name;
// Lustige Exception
"Der Remoteproxy hat keinen Channelempfänger, d.h. der Server besitzt keine registrierten Serverchannel oder die Anwendung hat keinen passenden Clientchannel, um mit dem Server zu kommunizieren."
Ich versuche ja hier auf eine eingebettete Instanz einer anderen von mir erstellten Klasse zuzugreifen. Braucht diese Klasse einen extra Channel oder wo liegt das Problem.
Ich hoffe ich hab's nicht zu sehr aufgebläht, aber manchmal macht eine genau Beschreibung eben auch den Unterschied.
Viele Grüsse
Sebastian
Problem gestossen das ich mir nicht erklären kann. Es hat wohl was mit den Channels zu tun.
Ich habe eine normale Anwendung die ein Objekt als Singleton zur Verfügung stellt auf dem localhost. Eine Client holt sich nun einen Verweis auf dieses Objekt, genau genommen wohl eigentlich einen Proxy wovon man allerdings nix mitbekommt. Es klappt ja auch soweit..
Mein RemoteObject:
Code:
[Serializable] class myCustomClass : MarshalByRefObject { public string name; public myCustomClass (){ name = "xx"; } } [Serializable] class myRemoteObject : MarshalByRefObject { public myCustomClass myClassObject = new myCustomClass () public myRemoteObject(){} public void HelloMethod(string sMsg){MessageBox.Show(sMsg);} }
Mein Server:
Code:
TcpChannel myChannel = new TcpChannel(3021); ChannelServices.RegisterChannel(myChannel); RemotingConfiguration.RegisterWellKnownServiceType(typeof(myRemoteObject), "RemoteObject", WellKnownObjectMode.Singleton); myRemoteObject myObject = (myRemoteObject)Activator.GetObject(typeof(myRemoteObject),"tcp://localhost:" + 3021.ToString() + "/RemoteObject" );
Mein Client:
Code:
TcpChannel myChannel = new TcpChannel(3021); ChannelServices.RegisterChannel(myChannel); myRemoteObject myObject = (myRemoteObject)Activator.GetObject(typeof(IVWebServiceClient),"tcp://localhost:" + 3021.ToString() + "/RemoteObject");
Was ist nun das Problem ?
Wenn ich auf dem RemotingObject eine primitive Methode aufrufe klappt das.
myRemoteObject.HelloMethod("Das ist ein Test");
// Klappt ganz wunderbar
Wenn ich versuche auf ein Member des RemoteObjects direkt zuzugreifen,
geht die Sache ordentlich schief.
string s = myRemoteObject.myClassObject.name;
// Lustige Exception
"Der Remoteproxy hat keinen Channelempfänger, d.h. der Server besitzt keine registrierten Serverchannel oder die Anwendung hat keinen passenden Clientchannel, um mit dem Server zu kommunizieren."
Ich versuche ja hier auf eine eingebettete Instanz einer anderen von mir erstellten Klasse zuzugreifen. Braucht diese Klasse einen extra Channel oder wo liegt das Problem.
Ich hoffe ich hab's nicht zu sehr aufgebläht, aber manchmal macht eine genau Beschreibung eben auch den Unterschied.
Viele Grüsse
Sebastian
Comment