2009-05-08 4 views
0

J'ai un service WCF .NET qui expose un objet qui utilise le polymorphisme. Apparemment, Websphere Integration Developer est incapable de gérer cela correctement (je ne suis pas le développeur Websphere), sauf en ajoutant tous les champs de tous les polymorphismes possibles et en utilisant une énumération ou autre pour dire que c'est un objet de tel ou tel type.WCF -> Websphere Integration Developer et le polymorphisme

Je ne peux pas croire qu'IBM ait créé un produit qui ne supporte pas le polymorphisme! Alors .. Quelqu'un peut-il expliquer comment gérer cela, ou pointer vers des ressources que je peux transmettre?

Répondre

1

Cela peut ne pas être le problème, mais vous devez savoir que les services Web, en général, ne prennent pas en charge les méthodes virtuelles. En tant que tels, ils ne supportent pas vraiment le polymorphisme.

En fait, les services Web ne sont pas orientés objet du tout. Ils sont tous sur le XML, qui n'est pas orienté objet. Toute ressemblance avec des classes avec des méthodes et des propriétés est le fruit de l'imagination de vos outils - en particulier les outils qui produisent vos classes proxy regardent la description (XML) du service Web et produisent des classes plus ou moins semblables à ce qui est décrit.

Parfois plus, et parfois moins.

+0

D'accord. Mais les hiérarchies d'héritage peuvent être modélisées avec des types complexes et complexContent/extension d'une manière interopérable. –

+0

@Rune: Vrai. J'ai lu la question comme étant sur le polymorphisme de style OO, pas sur le "polymorphisme de données". –

+0

Je comprends pourquoi, aurait pu être plus clair. –

0

Le problème est que votre client ne connaît que votre service via le contrat ou wsdl. Le wsdl définit simplement les entrées et les sorties des méthodes dans votre contrat (ainsi que les contrats de données utilisés par ces méthodes) - il n'expose aucune des classes de base, etc. de la classe de service (ou tout autre des contrats de données) votre client appellera.

Ce n'est pas que WebSphere ne puisse pas gérer le polymorphisme - c'est plus que le wsdl ne peut pas l'exprimer de la façon dont vous pouvez vous attendre.