| Fabio Parise |
Problema di serializzazione di un oggetto XmlSchema...
Ciao a tutti, ho il seguente problema:
Ho un metodo di un'applicazione COM+ di tipo Server che ritorna un oggetto di tipo XmlSchema. La chiamata mi da a runtime la seguente eccezione. An unhandled exception of type 'System.Runtime.Serialization.SerializationException' occurred in system.enterpriseservices.dll Additional information: The type System.Xml.Schema.XmlSchema in Assembly System.Xml, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 is not marked as serializable. Qualcuno ha un idea di come posso risolvere questo problema? Grazie, Fabio |
| Andrea Bini [MS] |
Re: Problema di serializzazione di un oggetto XmlSchema...
Quando fai una chiamata da un cliente .NET verso un ServicedComponent contenuto in una applicazione COM+ di tipo server, nonostante il protocollo utilizzato sia DCOM, in realtà quasi sempre viene usato remoting per trasformare la chiamata in un IMessage, il quale viene serializzato in una stringa ed inviato al server.
Questo significa che tutti i parametri del metodo devono essere di tipi "remotizzabili" (serializzabili o MarshalByRef), e purtroppo XmlSchema non è serializzabile. Nel tuo caso mi sa che l'unica soluzione è salvarsi l'XmlSchema in una stringa e passare la stringa, oppure farti una classe wrapper serializzabile Andrea Bini [MS] Il presente posting viene fornito “così come é”, senza garanzie, e non conferisce alcun diritto |
| Fabio Parise |
Re: Problema di serializzazione di un oggetto XmlSchema...
Ok. Grazie mille.
Non riesco comunque a comprendere il motivo per cui alcune classi banalmente serializzabili come XmlDocument o XmlSchema non siano serializzabili dal framework al pari di quanto avviene per la maggiorparte delle altre classi del FWK. |
| Andrea Bini [MS] |
Re: Problema di serializzazione di un oggetto XmlSchema...
Mi sono informato sull'argomento.
Il motivo per cui XmlDocument & XmlSchema non hanno l'attributo [Serializable] è che l'implementazione di default del serializzatore produceva documenti serializzati molto più grandi di quelli originali (ad esempio, a fronte di un documento xml di 40 bytes, l'immagine serializzata era più di 100K!!!). Il motivo sta nel fatto che il parser xml è ottimizzato per l'accesso ai nodi in memoria, a scapito dell'occupazione di memoria del documento parsato. Si sarebbe anche potuto decidere di fornire un'implementazione custom di ISerializable, ma trattandosi di documenti XML, che sono già una specie di formato di serializzazione, si è pensato che non fosse necessario. Segnalo comunque al gruppo di sviluppo l'effetto collaterale che hai incontrato (magari per la versione 2.0 di .NET cambiano qualcosa...) Andrea Bini [MS] Il presente posting viene fornito “così come é”, senza garanzie, e non conferisce alcun diritto |