2010-07-01 3 views
9

J'ai une application serveur/client développée dans Delphi 2006. Le client est Win32 et le serveur est un service web .net 1.1.Le service WCF exposé comme ASMX n'acceptera pas les paramètres

Nous sommes en train de mettre à jour ce projet, mais il faut le faire par petites étapes. J'ai commencé avec le serveur et créé un projet WCF dans VS2010 (C# .net 4.0). La première étape consiste à faire fonctionner le serveur dans WCF sans changer le client. J'ai donc utilisé le modèle de façade, créé une interface similaire à l'ancien service web Delphi ajouté une référence à l'ancien. Net 1.1 dll et dans mon implémentation je viens d'appeler l'ancien code .net 1.1.

Prochaine étape de mise à jour de la classe proxy sur le client. Cela a échoué. L'importateur WSDL ne comprenait pas correctement basicHttpBinding, donc la classe proxy générée ne pouvait pas remplacer le proxy existant. Après un peu de recherche, j'ai trouvé cet article de blog.

http://kjellsj.blogspot.com/2006/12/how-to-expose-wcf-service-also-as-asmx.html

Cela a fonctionné, le ASMX WSDL était pas différent de l'ancien .net 1.1, donc tout appered ok.

Mais ce n'était pas le cas. Lors du test du nouveau service, j'ai découvert que tous mes paramètres étaient vides/null sur le serveur. J'ai essayé avec Fiddler sur le client et les paramètres sont présents dans le XML qui est envoyé au serveur.

Donc, je suis bloqué. Toute idée sur la façon de résoudre ce problème serait très appréciée. Y a-t-il un code qui pourrait être interressant à voir alors faites le moi savoir.

+0

Ainsi, le WSDL est le même, mais le serveur est maintenant .NET 4.0 au lieu de 1.1? Si le client Delphi utilise le même WSDL que précédemment, mais que le serveur ne voit plus les paramètres, j'écrirais un client dans .Net et verrais si cela fonctionne. Si c'est le cas, comparez les demandes de savon du client de .Net et Delphi. – mjn

+5

Comparez le XML. "Null parameters" signifie généralement qu'il y a une différence d'espace de noms entre ce qui est envoyé et ce qui est attendu. –

Répondre

1

J'ai rencontré un problème similaire avec un service Web asmx ... certaines données perdaient leurs valeurs. Si vous utilisez des données hiérarchiques, vous devrez peut-être déclarer les objets internes ou hérités à l'aide d'un attribut XmlInclude. Par exemple, si vous avez une classe User utilisée dans votre service et une sous-classe Customer, vous devrez peut-être déclarer la classe Customer au service si elle n'est pas utilisée directement dans une méthode Web. Vous feriez ceci comme suit.

[XmlInclude(typeof(Customer))] 
public class Service : WebService 

Bien sûr, cela n'a rien à voir avec cela, alors bonne chance si c'est le cas. :)

0

Vérifiez que les noms de paramètres du nouveau service correspondent aux noms de l'ancien service. Si vous avez modifié les noms des paramètres, ils ne seront pas mappés à partir du code XML et seront donc null dans le code d'exécution.

0

Ajouter attribut KnownType aux sous les classes

Questions connexes