Remoting icollection [Résolu]

Signaler
Messages postés
8
Date d'inscription
lundi 24 février 2003
Statut
Membre
Dernière intervention
19 avril 2006
-
Messages postés
27
Date d'inscription
vendredi 31 décembre 2004
Statut
Membre
Dernière intervention
29 novembre 2010
-
Bonjour,

J'essaye de faire du remoting en .net.
Je veux creer un objet activable de type icollection

voila comment j'ai procedé :
<li>une classe Person</li><li>une classe RemoteCollection qui herite de MarshalByRef et qui Implemente ICollection avec une arraylist
</li><li>une classe Persons qui est une collection de Person qui herite de RemoteCollection </li>J'ai un fichier de configuration pour activer ( balise activated ) Person et Persons par tcp.

Voila lorsque je lance mon client Person s'active bien mais pour Persons j'ai une exception qui est levé : "En raison de restriction de sécurité, le type System.Runtime.Remoting.ObjRef est inaccessible."

Si quelqu'un peu m'apporter des renseignement sur le remooting de collection?

Merci d'avance

************** Texte de l'exception **************
System.Runtime.Serialization.SerializationException: En raison de restrictions de sécurité, le type System.Runtime.Remoting.ObjRef est inaccessible. ---> System.Security.SecurityException: Échec de la demande.
at System.Security.SecurityRuntime.FrameDescSetHelper(FrameSecurityDescriptor secDesc, PermissionSet demandSet, PermissionSet& alteredDemandSet)
at System.Runtime.Serialization.FormatterServices.nativeGetSafeUninitializedObject(RuntimeType type)
at System.Runtime.Serialization.FormatterServices.GetSafeUninitializedObject(Type type)
--- Fin de la trace de la pile d'exception interne ---

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, IMethodCallMessage methodCallMessage)
at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, 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 Library.Contact.Persons.Add(Person person)

5 réponses

Messages postés
22
Date d'inscription
mercredi 23 novembre 2005
Statut
Membre
Dernière intervention
22 février 2006

Lorsque tu démarre ton objet coté serveur tu fais quelque chose du genre (en considérant un port de 1069) :

TcpChannel channel = new TcpChannel(1069);

Essaye en faisant :

BinaryServerFormatterSinkProvider provider = new BinaryServerFormatterSinkProvider();
provider.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;

IDictionary prop = new Hashtable();
prop["bindTo"] = "127.0.0.1";
prop["port"] = 1069;

TcpChannel channel = new TcpChannel(prop, null, provider);

Ce qui change c'est surtout le fait de mettre le niveau de filtre en "full".
Messages postés
8
Date d'inscription
lundi 24 février 2003
Statut
Membre
Dernière intervention
19 avril 2006

Merci beaucoup c'etait ca!!!
Messages postés
1
Date d'inscription
mardi 26 octobre 2004
Statut
Membre
Dernière intervention
4 décembre 2006

Merci,
Ce mail est précieux ;-)
J'ai eu le même problème.
Messages postés
27
Date d'inscription
vendredi 31 décembre 2004
Statut
Membre
Dernière intervention
29 novembre 2010

Salut,

je voulais vous demander si je pouvais faire la même chose chezle client.

J'veux séréaliser l'objet serveur qui contient un liste d'objet client (communication bidirectionnelle). Le problème vient dansla séréalisationdes objet clients (même message d'erreur : En raison de restrictions de sécurité, le type System.Runtime.Remoting.ObjRef est inaccessible.)

J'aiessayer de faire le même code pour le client

BinaryClientFormatterSinkProvider provider = new BinaryClientFormatterSinkProvider();

IDictionary prop = new Hashtable();
prop["port"] = 1069;
prop["typeFilterLevel"] = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;

TcpChannel channel = new TcpChannel(prop, null, provider);

mais leproblème persiste

qlq1 pourrait-il m'aider?

merci d'avance
Messages postés
27
Date d'inscription
vendredi 31 décembre 2004
Statut
Membre
Dernière intervention
29 novembre 2010

prop["typeFilterLevel"] = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;

ce bout de code c parceque BinaryClientFormatterSinkProvider n'offrepas le typefilterlevel