H
Hi,
versuche nun seit ein paar Tagen, das Chatbeispiel von tutorials.de zu benutzen. Das Problem das ich habe ist, dass ich zwar eine Verbindung zum Server bekomme, und auch von Client Funktionen des Servers aufrufen kann, ich jedoch eine Exception kriege, wenn ich versuche dieser Funktion eigene Objekttypen zu übergeben.
Auf den Typ System.Runtime.Remoting.ObjRef kann aufgrund von Sicherheitseinschränkungen nicht zugegriffen werden.
Mittlerweile habe ich rausgefunden, dass dies daran liegt, da die Standard Sicherheitseinstellungen wohl nur die Standardtypen zulassen. Erst durch
TypeFilterLevel.Full
seie es möglich auch eigene Objekte zu übertragen. Alle Beispiele die ich bisher gefunden habe, wollen nicht so wirklich funktionieren. Die Konfiguration möchte ich auch nicht, wie es oft demonstriert wird, in einer seperaten Konfigurationsdatei abspeichern, sondern direkt über den Programmcode steuren. Folgendes habe ich bisher:
Beim Server:
private void StartServer()
{
...
BinaryServerFormatterSinkProvider provider = new BinaryServerFormatterSinkProvider();
provider.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
IDictionary props = new Hashtable();
props["port"] = 1234;
myChan = new TcpChannel(props, null, provider);
ChannelServices.RegisterChannel(myChan);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(ServerObject),
"chat.rem", WellKnownObjectMode.Singleton);
...
}
Beim Client:
private void connect()
{
myChannel = new TcpChannel();
ChannelServices.RegisterChannel(myChannel);
myClient = new ClientObject(this, TxtNickname.Text);
remServer = (IServer)Activator.GetObject(typeof(IServer), "tcp://127.0.0.1:1234/chat.rem");
remServer._login(myClient);
}
Wie gesagt, die Verbindung funktioniert, jedoch nicht die Parameterübergabe eigener Klassen. Irgendwer eine Idee?
mfg
Sven