Question

J'ai un service Web basé WSE 3.0, et une application cliente WinForms qui utilise des types définis dans References.cs de ce service, mais les sous-classes pour fournir des fonctionnalités supplémentaires requises par le client.

Cependant, quand je passe une instance de la sous-classe de retour au service Web, même si je jetai explicitement revenir au type d'origine, je reçois le tant redouté:

Utilisez l'XmlInclude ou un attribut SoapInclude pour spécifier les types qui ne sont pas connus statiquement.

en référence à mon type dérivé.

Résumé de code:

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
    }
}

Je peux contourner ce problème en créant explicitement une instance DefinedInReferenceCs et en effectuant une copie en profondeur des domaines pertinents. Y at-il une meilleure façon?

Était-ce utile?

La solution

Depuis le sérialiseur XML utilise la réflexion pour travailler avec des objets, il n'y a aucun moyen de l'empêcher de voir que vos références de référence de classe de base d'une instance de votre classe dérivée. Oui, vous devez utiliser XmlInclude.

OTOH, avez-vous envisagé d'utiliser des classes partielles pour ajouter des fonctionnalités aux classes proxy d'origine? De cette façon, vous ne seriez pas besoin d'une classe dérivée du tout.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top