Respecto al problema cuando se llama al servicio web escrito en C# en Delphi
En primer lugar, creo que es necesario dar una explicación relativamente completa del desarrollo de los servicios web bajo la plataforma .net. La generación inicial de servicios web apareció en el entorno del comercio electrónico. Algunos problemas ya no son fáciles de resolver por medios tradicionales. Por ejemplo, en las aplicaciones para la comunicación empresarial y el intercambio de datos, ya no es factible utilizar mecanismos binarios como dcom y corba, sin mencionar que están limitados por sus respectivas plataformas, como dcom (modelo de distribución de objetos comunes). solo se puede realizar bajo la plataforma Windows, mientras que corba (agente de solicitud de objetos comunes arquitectura) es sólo un producto de la plataforma java. Les resulta difícil lograr la comunicación de datos entre aplicaciones.
En este contexto, los servicios web surgieron como los tiempos lo requieren. Son una buena solución para la penetración multilingüe, multiplataforma y buena y segura de los firewalls corporativos. Su arquitectura se divide generalmente en cinco niveles:
Comunicación de datos bajo canal http (protocolo de transferencia de hipertexto)
formulario de expresión de datos xml (lenguaje de marcado extensible)
Encapsulación de datos de SOAP (protocolo de acceso a objetos simples)
Formato de lenguaje de descripción de wsdl (lenguaje de descripción de servicios web)
uddi (descripción universal e integración de descubrimiento) descripción unificada, descubrimiento e integración
Ser multilingüe, multiplataforma y ser bueno y seguro para penetrar los firewalls corporativos es suficiente para entusiasmarnos. Sin embargo, también hay áreas que necesitan mejorar, como por ejemplo:
La comunicación de datos HTTP es lenta, especialmente la primera conexión.
Requiere la sobrecarga adicional de un servidor web.
Después de hablar de la arquitectura de los servicios web y sus ventajas y desventajas, vayamos al punto, cuál es el tema de nuestra discusión esta vez:
Problemas cuando se llama al servicio web en Delphi
Sin más preámbulos, lo ilustraremos con un ejemplo simple de prueba del atributo de webmethod: es un proceso comercial simple para completar una transferencia del cliente a al cliente b.
Primero creamos un servicio web en .net framework1.1. En este momento, .net creará automáticamente una aplicación web para nosotros.
Necesitamos crear un atributo de clasetest, que está bajo el atributo de espacio de nombrestesting. Luego, esta clase heredará automáticamente su clase base system.web.services.webservice. Cuando sea necesario, podemos configurar la clase de aplicación web. Su atributo de servicio web, los atributos básicos incluyen una descripción. y espacio de nombres
[atributo de servicio web(espacio de nombres=http://www.isdoo.com/services,
descripción=hola ansel, ¡este es un servicio web de prueba!)]
prueba de atributo de clase pública: system.web.services.webservice
{
[webmethodattribute(description=Información de descripción: hereda el método de conteo y sobrecarga el nombre. La ejecución es transferir dinero del usuario a al usuario b...,
//nombredelmensaje=cambiando el nombre del mensaje,
respuesta del búfer = verdadero,
duración de caché = 1000,
habilita sesión = verdadero,
opción de transacción = opción de transacción.requiere nuevo)]
transmoney de cadena pública (doble dinero)
{
intentar
{
contextutil.enablecommit();// ¡la transacción solo se usa para la operación de la base de datos!
moneyintoa(dinero);
salida de dinerob(dinero);
contextutil.setcomplete();
transacción de devolución exitosa,total +money.tostring();
}
captura (excepción e)
{
contextutil.setabort();
¡La transacción de devolución falló! /n/r +e.message;
}
}
moneyintoa privado vacío (dinero doble)
{
sqlcommand sqlcom = new sqlcommand(actualizar presupuesto establecido dinero=dinero++money.tostring()+ donde nombre='a');
acceso a la base de datos mibase de datos = nuevo acceso a la base de datos();
sqlcom.connection=mibase de datos.getconnection();
sqlcom.conexión.open();
sqlcom.executenonquery();
sqlcom.conexión.close();
//lanza una nueva excepción(¡la operación falló al transferir dinero a!);
}
dinero privado vacío de b (doble dinero)
{
sqlcommand sqlcom = new sqlcommand(actualizar presupuesto establecido dinero=dinero-+money.tostring()+ donde nombre='b');
acceso a la base de datos mibase de datos = nuevo acceso a la base de datos();
sqlcom.connection=mibase de datos.getconnection();
sqlcom.conexión.open();
sqlcom.executenonquery();
sqlcom.conexión.close();
//lanza una nueva excepción(¡la operación falló al transferir dinero desde b!);
}
}
A lo que debemos prestar especial atención es al atributo webmethodat, que también es el foco de lo que debemos hablar esta vez. Siempre que agregue [webmethodattribute] a un método, incluso si no tiene atributos, entonces el servicio web. expondrá este método a la persona que llama del segmento de Cliente. Hablemos de sus 6 atributos a continuación, incluidos 2 atributos de información descriptiva y 4 atributos funcionales.
Atributos de información descriptiva:
descripción
nombre del mensaje
4 propiedades funcionales:
respuesta del buffer
duración de la caché
sesión habilitada
opción de transacción
Entre ellos, debemos prestar atención al atributo de nombre de mensaje. Cuando Delphi llama al servicio web desarrollado en la plataforma .net, si configura el atributo de nombre de mensaje, se informará un error cuando el cliente lo llame. Esto puede ser un error, tal vez una versión posterior resuelva este problema. En cuanto a las funciones específicas de estos atributos, no se describirán en detalle aquí. Puedes leer libros relevantes.
A continuación enumeraré los pasos para que Delphi llame al servicio web:
En primer lugar, si simplemente desarrolla y llama al cliente, entonces solo necesita crear una aplicación normal. Luego, lo que debe hacer es encontrar el control SOAPhttpclient en los servicios web de la barra de herramientas y luego colocarlo en el cuerpo de la ventana de su aplicación cliente. ;
En segundo lugar, debe configurar el atributo URL o wsdl de este SOAPhttpclient. Este contenido es la dirección de servicio de su servicio web.
Por ejemplo, la dirección de servicio de nuestro ejemplo actual es: http://localhost/attributetesting/attributetesting.asmx
Si desea ingresar a wsdl, entonces es http://localhost/attributetesting/attributetesting.asmx?wsdl
Esto completa la configuración de control;
Luego necesitamos importar el wsdl del lado del servidor. Puede hacerlo manualmente o utilizar la función de importación de servicios web proporcionada por Delphi.
Finalmente, solo necesita llamar a la interfaz wsdl importada. Nuestro código correspondiente aquí es:
procedimiento tform1.bitbtn1click(remitente: tobject);
var
aa:attributetestsoap;//Este es el objeto de interfaz de clase en wsdl
mensaje: cadena ancha;
bb:doble;
comenzar
//httprio2 es en realidad la llamada clase proxy, que es responsable de la transmisión de datos, enviar solicitudes y aceptar respuestas.
aa:=httprio2 como atributotestsoap;
bb:=100,00;
msg:=aa.transmoney(bb);//Este es el método de servicio web que se nos presenta al llamar al servicio web.
mostrar mensaje (mensaje);
fin;
¡vale! ¡eso es todo!
Descargas populares de código fuente comercial www.html.org.cn