Remoting icollection

Résolu
cs_dieulapin Messages postés 8 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 19 avril 2006 - 6 janv. 2006 à 14:23
sidommou Messages postés 27 Date d'inscription vendredi 31 décembre 2004 Statut Membre Dernière intervention 29 novembre 2010 - 17 sept. 2008 à 12:26
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

Homerrrrr Messages postés 22 Date d'inscription mercredi 23 novembre 2005 Statut Membre Dernière intervention 22 février 2006
6 janv. 2006 à 16:04
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".
3
cs_dieulapin Messages postés 8 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 19 avril 2006
7 janv. 2006 à 15:50
Merci beaucoup c'etait ca!!!
0
cyrille37 Messages postés 1 Date d'inscription mardi 26 octobre 2004 Statut Membre Dernière intervention 4 décembre 2006
4 déc. 2006 à 18:14
Merci,
Ce mail est précieux ;-)
J'ai eu le même problème.
0
sidommou Messages postés 27 Date d'inscription vendredi 31 décembre 2004 Statut Membre Dernière intervention 29 novembre 2010
17 sept. 2008 à 12:24
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sidommou Messages postés 27 Date d'inscription vendredi 31 décembre 2004 Statut Membre Dernière intervention 29 novembre 2010
17 sept. 2008 à 12:26
prop["typeFilterLevel"] = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;

ce bout de code c parceque BinaryClientFormatterSinkProvider n'offrepas le typefilterlevel
0
Rejoignez-nous