2010-07-01 10 views
9

Tengo una aplicación servidor/cliente desarrollada en Delphi 2006. El cliente es Win32 y el servidor es un servicio web .net 1.1.El servicio WCF expuesto como ASMX no aceptará los parámetros

Estamos en el proceso de actualización de este proyecto, pero tiene que hacerse en pequeños pasos. Empecé con el servidor y creé un proyecto WCF en VS2010 (C# .net 4.0). El primer paso es hacer que el servidor se ejecute en WCF sin cambiar el cliente. Así que utilicé el patrón de fachada, creé una interfaz similar al antiguo delphi Webservice, agregué una referencia al viejo .ll 1.1 dll y en mi implementación acabo de llamar al viejo código .net 1.1.

Siguiente paso actualizando la clase proxy en el cliente. Esto falló El importador de WSDL no entendía correctamente el basicHttpBinding, por lo que la clase de proxy que se generó no pudo reemplazar el proxy existente.

Después de investigar un poco encontré esta publicación en el blog.

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

Esto funcionó, la ASMX WSDL no era diferente de la antigua .net así que todo bien appered 1.1.

Pero no fue así. Al probar el nuevo servicio, descubrí que todos mis parámetros estaban en blanco/nulo en el servidor. Intenté con Fiddler en el cliente y los parámetros están presentes en el XML que se envía al servidor.

Así que estoy atascado. Cualquier idea sobre cómo resolver esto sería muy apreciada. ¿Hay algún código que pueda ser interesante para ver y luego dejarme saber.

+0

Así que el WSDL es el mismo, pero el servidor es ahora .Net 4.0 en lugar de 1.1? Si el cliente Delphi usa el mismo WSDL que antes, pero el servidor ya no ve los parámetros, escribiría un cliente en .Net y vería si esto funciona. Si lo hace, compare las solicitudes de Soap de .Net y Delphi del cliente. – mjn

+5

Compara el XML. "Parámetros nulos" generalmente significa que hay una diferencia de espacio de nombres entre lo que se envía y lo que se espera. –

Respuesta

1

Me encontré con un problema similar con un servicio web asmx ... ciertos datos estaban perdiendo sus valores. Si está utilizando datos jerárquicos, puede necesitar declarar los objetos internos o heredados utilizando un atributo XmlInclude. Por ejemplo, si tiene una clase de usuario que se utiliza en su servicio y una subclase de cliente, es posible que necesite declarar la clase de Cliente al servicio si no se usa directamente en un método web. Lo harías de la siguiente manera.

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

Por supuesto, puede que no tenga nada que ver con esto, así que buena suerte si ese es el caso. :)

0

Confirme que los nombres de los parámetros en el nuevo servicio coinciden con los nombres en el servicio anterior. Si ha cambiado los nombres de los parámetros, no se correlacionarán con el XML, por lo que serán nulos en el código de ejecución.

0

Añadir atributo KnownType a las clases sub

Cuestiones relacionadas