create - consumir web service xml c#
Cliente SOAP en.NET: ¿referencias o ejemplos? (6)
Como entiendo, quiere llamar a su servicio web desde la aplicación cliente C #. Ya tiene el servicio y publicó el archivo WSDL (corríjase si estoy equivocado). Ahora, la forma más sencilla es generar clases de proxy en la aplicación C # (este proceso se llama agregar referencia de servicio). Hay dos formas principales de hacerlo: .NET proporciona servicios ASP.NET, lo cual es una forma antigua de hacer SOA, y WCF como sugirió John, que es el último framework de MS y proporciona muchos protocolos, incluidos los abiertos y MS propietarios.
Ahora, suficiente teoría y vamos a hacerlo paso a paso
- Abra su proyecto (o cree uno nuevo) en el estudio visual
- Haga clic con el botón derecho en el proyecto (en el proyecto y no en la solución) en el Explorador de soluciones y haga clic en Agregar referencia de servicio
Debe aparecer un cuadro de diálogo que se muestra en la captura de pantalla a continuación. Ingrese la url de su archivo wsdl y presione Ok. Tenga en cuenta que si recibe un mensaje de error después de presionar ok, intente eliminar? Wsdl part from url.
Expanda Referencias de servicio en Solution Explorer y haga doble clic en ServiceReference1 (el nombre puede variar). Debería ver el nombre de clase de proxy y el espacio de nombres generados. En mi caso, el espacio de nombre es WindowsFormsApplication1.ServiceReference1, el nombre de la clase proxy es Service1Client. Como dije anteriormente, los nombres de las clases pueden variar en su caso.
Vaya a su código fuente de C #. Agregar
using WindowsFormsApplication1.ServiceReference1
.- Ahora puede llamar al servicio de esta manera.
Service1Client service = new Service1Client();
int year = service.getCurrentYear();
Espero que esto ayude, si encuentras algún problema, háznoslo saber.
Fondo:
Estoy creando un sitio de servicios web que proporcionará muchos tipos de servicios simples sobre SOAP y posiblemente también otros protocolos. El objetivo es facilitar, por ejemplo, las conversiones, el análisis de RSS, las comprobaciones de correo no deseado y muchos otros tipos de trabajo. El sitio estará dirigido principalmente a desarrolladores principiantes.
Mi problema:
Nunca he desarrollado ningún C #, o .NET para ese asunto. Hice algunos VB6 hace muchos años, pero eso es todo. Ahora necesito algunos ejemplos de hacer llamadas RPC sobre SOAP en C # . Intenté buscar en la web, y Stack Overflow, para encontrar esto, pero no encontré muchos recursos, y no tengo idea de cómo clasificar los recursos (¿cuáles son antiguos? ¿Cuáles son incorrectos ?, etc.).
He creado un servicio de ejemplo simple, que se llama así en PHP:
<?php
$client = new SoapClient(''http://webservi.se/year''); //URL to the WSDL
echo $client->getCurrentYear(); //This method returns an integer, called "year"
?>
Ahora quiero llamar a este método lo más fácilmente posible en C #. Todas las referencias y ejemplos son bienvenidos. ¿Dónde empiezo? ¿Qué clases / módulos / qué puedo usar?
La solución no tiene que involucrar a SOAP en absoluto si hay mejores marcos de comunicación (el back end debe ser extensible), pero tenga en cuenta que el lado del servidor está implementado en PHP en Unix, por lo que las soluciones patentadas de Microsoft están fuera de cuestión en el lado del servidor.
Tenga en cuenta que lo necesito para poder escribir la documentación que J. Random Web Developer pueda seguir (incluso si están en un alojamiento web compartido). Por lo tanto, creo que el mejor enfoque debería ser hacer esto solo en código, pero incluso otras formas de hacerlo son, por supuesto, bienvenidas.
Eche un vistazo a " usar los servicios de WCF con PHP ". Explica los conceptos básicos de lo que necesitas.
Como resumen teórico:
WCF o Windows Communication Foundation es una tecnología que permite definir servicios abstraídos del camino, el método de comunicación subyacente, en los que se invocarán.
La idea es definir un contrato sobre qué hace el servicio y qué ofrece el servicio y también definir otro contrato sobre qué método de comunicación se utiliza para consumir realmente el servicio, ya sea TCP, HTTP o SOAP.
Usted tiene la primera parte del artículo here , explicando cómo crear un Servicio WCF muy básico.
Más recursos:
Aslo eche un vistazo a NuSOAP. Si ahora NuSphere este es un conjunto de herramientas que le permite conectarse desde PHP a un servicio WCF.
Estás buscando en el lugar equivocado. Debería buscar Windows Communication Framework .
WCF se usa tanto en el cliente como en el servidor.
He hecho bastante de lo que estás hablando, y la interoperabilidad SOAP entre plataformas tiene una regla cardinal: CONTRATO PRIMERO. No derive su WSDL del código y luego intente generar un cliente en una plataforma diferente. Algo más que las funciones de tipo "Hola mundo" muy probablemente no generarán código, no podrán hablar en tiempo de ejecución o (mi favorito) no enviarán o recibirán correctamente todos los datos sin generar un error.
Dicho esto, WSDL es algo complicado, desagradable y evito escribirlo desde cero siempre que sea posible. Aquí hay algunas pautas para una interoperabilidad confiable de servicios (usando Referencias Web, WCF, Axis2 / Java, WS02, Ruby, Python, lo que sea):
- Siga adelante y haga primero el código para crear su WSDL inicial. Luego, borre su código y vuelva a generar la (s) clase (s) de servidor del WSDL. Casi todas las plataformas tienen una herramienta para esto. Esto le mostrará los hábitos extraños que tiene su plataforma particular, y puede comenzar a ajustar el WSDL para que sea más simple y directo. Ajustar, regenerar, repetir. Aprenderá mucho de esta manera, y es un conocimiento portátil.
- Se adhieren a las antiguas clases de lenguaje antiguo (POCO, POJO, etc.) para tipos complejos. NO use construcciones específicas de plataforma como List <> o DataTable. Incluso las matrices asociativas de PHP parecerán funcionar, pero fallarán en formas difíciles de depurar en todas las plataformas.
- Se adhieren a los tipos de datos básicos: bool, int, float, string, date (Time) y arrays. Las probabilidades son que cuanto más particular sea acerca de un tipo de datos, menos ágil será con los nuevos requisitos a lo largo del tiempo. NO quiere cambiar su WSDL si puede evitarlo.
- Una excepción a los tipos de datos anteriores: date un mecanismo NameValuePair de algún tipo. No creería cuántas veces una lista de estas cosas salvará su tocino en términos de flexibilidad.
- Establezca un espacio de nombre real para su WSDL. No es difícil, pero puede que no creas cuántos servicios web he visto en el espacio de nombres "http://www.tempuri.org". Además, use un URN ("urn: com-myweb-servicename-v1", no un espacio de nombres basado en URL ("http://servicename.myweb.com/v1". No es un sitio web, es un conjunto abstracto de caracteres). eso define una agrupación lógica. Probablemente tuve una docena de personas que me llamaron para pedirme ayuda y dicen que fueron al "sitio web" y que no funcionó.
</rant>
:)
Si puede hacer que funcione en un navegador, entonces algo tan simple como esto funcionaría
var webRequest = WebRequest.Create(@"http://webservi.se/year/getCurrentYear");
using (var response = webRequest.GetResponse())
{
using (var rd = new StreamReader(response.GetResponseStream()))
{
var soapResult = rd.ReadToEnd();
}
}
Here puede encontrar un buen tutorial para llamar a un servicio web basado en NuSOAP desde una aplicación de cliente .NET. Pero IMO, también debe considerar el Marco de servicios web WSO2 para PHP (WSO2 WSF / PHP) para el servicio. Consulte el Marco de servicios web de WSO2 para PHP 2.0. Mejora significativamente la única biblioteca PHP de la industria para crear servicios SOAP y REST . También hay un webminar respecto.
Ahora, en el mundo de .NET también aliento el uso de WCF, teniendo en cuenta los problemas de interoperabilidad. here se puede encontrar un ejemplo de interoperabilidad, pero este ejemplo usa un servicio PHP-client + WCF en lugar de lo contrario. Siéntase libre de implementar el servicio PHP y el cliente WFC.
Hay algunos proyectos de fuente abierta relacionados con WCF en codeplex.com que encontré muy productivos. Estos proyectos son muy útiles para diseñar e implementar Win Forms y las aplicaciones de Windows Presentation Foundation: Smart Client , Web Client y Mobile Client . Se pueden usar en combinación con WCF para llamar de forma inteligente a cualquier tipo de servicios web.
En términos generales, el equipo de patrones y prácticas resume las buenas prácticas y diseños en varios proyectos de código abierto que tratan con la plataforma .NET, especialmente para la web. Entonces, creo que es un buen punto de partida para cualquier decisión de diseño relacionada con clientes .NET.