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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top