tipo derivato sconosciuto a WSE 3.0 servizio web
-
20-09-2019 - |
Domanda
Ho un servizio basato sul web WSE 3.0, e un'applicazione client WinForms che fa uso di tipi definiti in References.cs di quel servizio, ma sottoclassi loro di fornire alcune funzionalità aggiuntive richieste dal cliente.
Tuttavia, quando passo un'istanza della sottoclasse di nuovo al servizio Web, anche se ho esplicitamente gettato indietro al tipo originale, ottengo la temuta:
Utilizzare i XmlInclude o l'attributo SoapInclude per specificare i tipi che non sono noti staticamente.
in riferimento alla mia tipo derivato.
sintesi Codice:
public class DefinedInReferenceCs
{
// ...
}
public class ClientSubclass : DefinedInReferenceCs
{
// My extra stuff
}
public class MyClient
{
public CallTheWebService(ClientSubclass obj)
{
// obj is an instance of ClientSubclass, cast as DefinedInReferenceCs
svc.MyMethod((DefinedInReferenceCs)obj);
// Throws an exception complaining that ClientSubclass is not statically known
}
}
posso ottenere intorno a questo creando in modo esplicito un'istanza DefinedInReferenceCs e l'esecuzione di una copia completa dei settori pertinenti. C'è un modo migliore?
Soluzione
Dato che il Serializzatore XML utilizza la riflessione di lavorare con gli oggetti, non c'è modo per evitare che si visto che i riferimenti di riferimento della classe base un'istanza della classe derivata. Sì, è necessario utilizzare XmlInclude
.
OTOH, Hai pensato di usare classi parziali per aggiungere funzionalità alle classi proxy originali? In questo modo, non avrebbe bisogno di una classe derivata a tutti.