Remoting Problem ..


erik s.

Erfahrenes Mitglied
Hi,

also ich hab mir weasels Tutorial zu Gemüte geführt und war begeistert, als meine eigene Version lief.
Ich hab einige kleine neue Features eingebaut, aber beim jetzigen komm ich nicht weiter: Ich möchte, dass nachdem sich ein neuer Benutzer auf dem Server einloggt, dass der Server eine Liste mit allen Benutzern an alle Benutzer schickt. Dazu habe ich dem Interface des Servers die Funktion
Code:
bool _sendNickList();
und dem Interface des Clients die Funktion
Code:
void _setNickList(ArrayList nicks);
hinzugefügt.
Die Implementierungen sehen wie folgt aus:
Code:
		private ArrayList getNicks() 
		{
			ArrayList nicks = new ArrayList();
			foreach(IClient user in _clients.Values) 
			{
				nicks.Add(user._nick.ToString());
			}
                        nicks.Sort();

			return nicks;
		}

		public bool _sendNickList() 
		{
			ArrayList nicks = getNicks();
			foreach(IClient user in _clients.Values) 
			{
				user._setNickList(nicks);
			}

			return true;
		}
und
Code:
		public void _setNickList(ArrayList nicks) 
		{
			foreach(object nick in nicks) 
			{
				myParent.listCurrentUsers.Items.Add(nick);
			}
		}
Die Funktion getNicks() gibt nur die Liste mit allen Benutzernamen in Form einer ArrayList zurück.
Code:
remServer._sendNickList();
wird vom Client aufgerufen, nachdem er sich eingeloggt hat.
Ich habe alles - ohne einen Fehler zu erhalten - compiliert, den Server ausgeführt und gestartet (läuft) und dann den Client. Wenn ich diesen dann allerdings verbinden lassen will, hängt er sich auf.

Ich hoffe die Infos reichen, dass mir geholfen werden kann.

Danke im voraus, MfG
 

Alexander Schuc

crazy-weasel
Hallo.

Sorry das ich erst so spät schreibe.
Als ich das Tutorial schrieb hatte ich auch anfangs das Problem, das sich der Client aufgehängt hat.
Leider kann ich mich nicht mehr erinnern, was ich tat um dies zu lösen.
Wenn du mir das Projekt schickst, schaue ich aber gerne mal drüber.

Du könntest das Projekt gezipt an einen Beitrag anhängen, oder mir per Mail schicken. Wenn per Mail, sags mir, dann schicke ich dir meine EMail-Adresse.

Mfg,
Alex
 

erik s.

Erfahrenes Mitglied
Hi, ich bins .. wieder mal :)

Also ich hab das jetzt alles hinbekommen, selbst einige Beispiele gemacht dazu etc.
(Die Lösung war übrigens der Einsatz von Threads ..)

Aber mir tut sich jetzt ein neues Problem auf:
Ich würde gern ein ServerObject erstellen, dessen Konstruktur Parameter akzeptiert. Allerdngs ist genau da das Problem zu finden: Wie soll ich dem Object dann die Parameter übergeben, wenn in der ServerForm-Klasse selbst ja praktisch nicht mal ein Objekt davon erstellt wird

Ih hoffe ihr versteht, wie ichs meine :/
Hilfe könnte ich dringends gebrauchen ..

MfG, danke im voraus
 

jgeske

Grünschnabel
Hi,

dieser Beitrag ist zwar schon älter, aber ich hoffe, dass er trotzdem noch gelesen wird.
@erik s: Wie hast Du denn die Security-Exceptions beim Framework 1.1 und Sharp-Develop hinbekommen? Ich habe genau das gleiche Problem:

"Because of security restrictions, the type System.Runtime.Remoting.ObjRef cannot be accessed"

Wäre cool, wenn Du mir die Lösung verraten könntest.

Danke und cu, Jo
 

jgeske

Grünschnabel
Hi erik s.

Tja, an die Lösung habe ich auch schon gedacht :) Allerdings wäre mir schon lieber dem Grundsatz "Update to the latest and greatest" zu folgen und daher stets die aktuellste Release des Framework zu nutzen. Ich werde mal Crazy Weasel mit der Frage belästigen, er hat sicherlich einen Rat.

cu, Jo
 

Alexander Schuc

crazy-weasel
Hi ihr. =)

Hab im Moment leider nur relativ begrenzt Zeit, und da habe ich nicht so Platz für Remoting im Moment.

Hab trotzdem mal was, was eventuell hilft. ;)

http://tutorials.furred.net/Remoting/

Link folgen und auffinden:
# Das Tutorial in PDF-Form, ausgebessert und unter .net 1.1 lauffähig.
# Ein Zip mit dem unter .net 1.1 lauffähigem Code.

MfG,
Alex
 

jgeske

Grünschnabel
Hi Alex,

vielen Dank für die schnelle Hilfe. Funktioniert jetzt auch bei mir.
Frohe Weihnachten und guten Rutsch! :)

Jo
 

dracom

Grünschnabel
hallo

ich habe mir das tutorial angeschaut und leider klappte es nicht. ich bekam immer den fehler das die methode IServer_setText nicht exisitiert.

also habe ich mir das projekt heruntergeladen und direkt die ausführbaren dateien gestartet.

der server startet, der client stürzt ab und hängt sich mit der fehlermeldung

See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.Runtime.Serialization.SerializationException: Because of security restrictions, the type System.Runtime.Remoting.ObjRef cannot be accessed. ---> System.Security.SecurityException: Request failed.
at System.Runtime.Serialization.FormatterServices.nativeGetSafeUninitializedObject(RuntimeType type)
at System.Runtime.Serialization.FormatterServices.GetSafeUninitializedObject(Type type)
The action that failed was:
Demand
The type of the first permission that failed was:
System.Security.Permissions.SecurityPermission
The first permission that failed was:
<IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Flags="Infrastructure"/>

The demand was for:
<PermissionSet class="System.Security.PermissionSet"
version="1">
<IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Flags="Infrastructure"/>
</PermissionSet>

The only permitted permissions were:
<PermissionSet class="System.Security.PermissionSet"
version="1">
<IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Flags="SerializationFormatter"/>
</PermissionSet>

The method that caused the failure was:
System.Runtime.Remoting.Channels.ServerProcessing ProcessMessage(System.Runtime.Remoting.Channels.IServerChannelSinkStack, System.Runtime.Remoting.Messaging.IMessage, System.Runtime.Remoting.Channels.ITransportHeaders, System.IO.Stream, System.Runtime.Remoting.Messaging.IMessage ByRef, System.Runtime.Remoting.Channels.ITransportHeaders ByRef, System.IO.Stream ByRef)
--- End of inner exception stack trace ---

Server stack trace:
at System.Runtime.Serialization.FormatterServices.GetSafeUninitializedObject(Type type)
at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ParseObject(ParseRecord pr)
at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Parse(ParseRecord pr)
at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadObjectWithMapTyped(BinaryObjectWithMapTyped record)
at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadObjectWithMapTyped(BinaryHeaderEnum binaryHeaderEnum)
at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run()
at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
at System.Runtime.Remoting.Channels.CoreChannel.DeserializeBinaryRequestMessage(String objectUri, Stream inputStream, Boolean bStrictBinding, TypeFilterLevel securityLevel)
at System.Runtime.Remoting.Channels.BinaryServerFormatterSink.ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, IMessage& responseMsg, ITransportHeaders& responseHeaders, Stream& responseStream)

Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at Interfaces.IServer._login(IClient client)
at Client.client.connect() in d:\_projects\remotingtutorial\client\client.cs:line 181
at Client.client.btnConnect_Click(Object sender, EventArgs e) in d:\_projects\remotingtutorial\client\client.cs:line 198
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


auf

wird das tut noch betreut oder aktualisiert? hatte jemand das gleiche problem?

die screenshot die anscheinend im tut vorhanden sein sollten, existieren auch nicht mehr
 

dracom

Grünschnabel
das tut meine ich :)

das habe ich probiert.
der server lies sich nicht kompilieren und der client in der zip datei verursacht den beschriebenen fehler
 

erik s.

Erfahrenes Mitglied
Hi ihr. =)

Hab im Moment leider nur relativ begrenzt Zeit, und da habe ich nicht so Platz für Remoting im Moment.

Hab trotzdem mal was, was eventuell hilft. ;)

http://tutorials.furred.net/Remoting/

Link folgen und auffinden:
# Das Tutorial in PDF-Form, ausgebessert und unter .net 1.1 lauffähig.
# Ein Zip mit dem unter .net 1.1 lauffähigem Code.

MfG,
Alex
Am besten liest du dir, wenn du in einen Thread postest, diesen erstmal durch. Das stand ungefähr 2 Beiträge weiter oben.

MfG

EDIT: merke grade, dass der Link tot ist. Sorry ...