Je dois créer un service WCF qui émule un service tiers. Ce service a des messages et des wrappers très compliqués pour eux, donc je vais les simplifier dans la description.
J'ai WSDL de ce service et créé une classe proxy. Mais ici le premier problème se produit: toutes les méthodes dans le proxy ont
[System.ServiceModel.OperationContractAttribute(Action = "", ReplyAction = "*")]
Il est donc impossible de créer un service WCF avec plusieurs méthodes: chacune pour une méthode en proxy parce que chaque méthode doit avoir une action unique. Je pense que le service tiers a une méthode qui gère toutes les demandes. Et j'ai créé une telle méthode avec les attributs KnownType nécessaires sur RequestTypeBase et ResponceTypeBase. Toutes les méthodes de classe proxy ont un paramètre de type, dérivé de RequestTypeBase. Et voici le problème principal et la question: lorsque le service WCF essaye de désérialiser le corps du message, il émet une exception disant que le nom de l'élément attendu est "Process" (le nom de ma méga-méthode qui traite toutes les requêtes) "RequestType1" (la classe de nom avec les données qui doivent être passées à la méthode "Process" comme paramètre). Alors, comment puis-je recevoir un tel message ?? Existe-t-il un attribut dans WCF pour ne pas requérir le nomMéthode en tant que racine du corps du message? Et je ne comprends même pas pour quoi WCF a besoin de MethodName s'il sait déjà quelle méthode est appelée? On dirait une redondance avec une spécification d'action.Contrôle de la sérialisation de corps de message WCF
exemple MessabeBody Peut-être simple qui est en train de traiter avec succès par WCF, vous aidera à comprendre ce que je veux dire:
<s:Body>
<TestMethod xmlns="someNamespace">
<x>1</x>
<str>param2</str>
</TestMethod>
</s:Body>
Oh non, je pense que XmlSerializerFormatAttribute ne fait rien de bien - XmlSerializer ne lance simplement pas une exception que l'élément "Process" ne trouve pas, mais il en résulte en appelant cette méthode avec null comme paramètre = ( –
Oh, comme cela arrive souvent, bonne question est la moitié de la réponse =). J'ai trouvé l'attribut qui a aidé: [XmlSerializerFormatAttribute] Ajouter à l'interface-méthode du service WCF –