2011-04-13 3 views
0

J'ai une application qui utilise WCF. Il fonctionne très bien sur Mono 2.8.2 sous Ubuntu et .NET 3.0 sous Windows.WCF KnownTypes dans Mono 2.10/MonoTouch 4.0

Il décore le contrat de service WCF avec l'attribut « ServiceKnownType », qui pointe vers une méthode renvoyant les types dérivés nécessaires pour utiliser le serveur:

[ServiceKnownType("GetKnownTypes", typeof(KnownTypeProvider)] 

Je suis PORTAGE mon application à MonoTouch. J'utilise le dernier 4.0, basé sur Mono 2.10.1. Cela ne fonctionne plus: mon appel WCF échoue car DataContractSerializer sur le client ne reconnaît pas le type de retour.

Je définis un point d'arrêt dans ma méthode 'GetKnownTypes' et je vois qu'il n'est jamais appelé. Je suppose que cette partie de System.ServiceModel n'est pas présente/ne fonctionne pas dans MonoTouch? Je tente de contourner ce problème en décorant le type de retour de base avec l'attribut 'KnownType' à la place.

[KnownType("GetKnownTypes")] 

Encore une fois, cela ne fonctionne pas et ma méthode 'GetKnownTypes' n'est jamais appelée. En regardant la source pour DataContractSerializer, il semble que si vous utilisez un nom de méthode plutôt que de spécifier le type, il est simplement ignoré ?!

Je vais essayer à nouveau en spécifiant le type au lieu d'utiliser une méthode (regardant la source de DataContractSerializer, il semble comme cela fonctionnera), mais cela est difficile pour moi MonoTouch parce que je vais avoir besoin d'utiliser typeof plutôt que Type.GetType ("fully.qualified.typename").

Existe-t-il une autre solution? Solution de contournement?

J'ai vu ceci: How do you configure WCF known types programmatically?, mais il semble MonoTouch manque quelques-unes des interfaces requises ...

Merci à l'avance

Répondre

1

Il semble fermement que ce soit un bogue dans MonoTouch ou une régression en Mono (Je n'ai pas un environnement pour tester en Mono 2.10 sur le bureau en ce moment)

CONTOURNÉS la question en restructurant mes projets et en utilisant

[KnownType(typeof(MyDerivedType))] 

Sur le type de base. Cela fonctionne très bien sur MonoTouch 4.0.

+1

Problème ServiceKnownType confirmé comme bug en Mono et corrigé: https://github.com/mono/mono/commit/77758013 – TheNextman