WebServices: Crear y consumir un Web Service en C#

En este ejemplo crearemos un web service simple que únicamente devuelva una cadena de texto. Si recibiera parámetros o realizara alguna operación (consultar una base de datos, realizar cálculos, etc…) el procedimiento sería análogo a cualquier método “típico”. Comencemos por la creación de un nuevo Web Service. Abrimos VisualStudio y creamos un nuevo proyecto “Aplicación del Servicio Web ASP.NET” tal y como se ve en la captura:

Veréis que se os crea un método “HelloWorld” que retorna un string “Hola a todos”. Podéis crear cualquier método que queráis para que haga la tarea que prefiráis (recibiendo o no parámetros). Para el ejemplo usaremos ese método porque es uno de los más simples. No tocamos nada, simplemente guardamos y hacemos “Generar -> Publicar WebService”. Esto publicará en el servidor web el servicio web que acabamos de crear. Evidentemente necesitamos un servidor en el que publicarlo, en mi caso he elegido realizar la publicación por ftp. La dirección sería: ftp://NombreDeUsuario:Contraseña@DireccionDelServidor/Una vez hecho esto, podemos irnos a un navegador y teclear: http://DireccionDelServidor/Service1.asmx y veremos que el servicio web responde de la forma esperada. Es decir, todo está listo :) 

Crear una aplicación que lo consuma no es problema. Creamos un proyecto “Aplicación para Windows” y construimos una interfaz con esta pinta:

Ahora debemos agregar una referencia al WebService para que nuestra aplicación lo conozca. Para ello hacemos “Proyecto -> Agregar referencia Web” y en la dirección URL tecleamos: http://DireccionDelServidor/Service1.asmx y le damos un nombre a la referencia web, en mi caso “HelloWorld”. Ahora nuestro proyecto ya conoce al WebService pero, ¿cómo lo usamos? Bien, hagamos doble click sobre el botón “Voy a tener suerte”. Haremos que al ser clicado instancie al WebService, llame al método HelloWorld y ponga en la caja de texto el resultado del método.

            Service1 service = new Service1();
           txtAns.Text = service.HelloWorld();

Ahora sólo nos queda ejecutar el programa y:

Perfecto :) Hemos creado un WebService y después una aplicación de escritorio que lo consume. A partir de ahora, todo es ir complicando un poco más el proceso dotando al servicio web de más operaciones y más complejas.

Por Carballude

Me llamo Pablo Carballude González, soy graduado en computación con master en HCI y Seguridad Informática. Actualmente trabajo para Amazon en Seattle como Software Developer Engineer. Soy de esas personas que no saben si los textos autobiográficos deben ser en primera o tercera persona. Lo intenté en segunda, pero no le entendí nada :P

11 comentarios

  1. No me ha resultado me pudes especificar la using que usaria, y el nombre del formulario,

    te agradezco de antemano gracias.

  2. Hola bueno, te indico los pasos que realice:
    -nuevo sitio web -> Servicio Web ASP.Net – Nombre:WebService2 (identico a la imagen)
    -luego botón derecho Ver en el Explorador
    http://localhost:2622/WebService2/Service.asmx
    -Clic en el metodo HelloWorld, [invocar], y me da XML «Hola a todos», todo bien hasta aqui.
    -Agrego un proyecto Aplicacion para Windows (con un botón y caja de texto)
    -en la aplicacion windows botón derecho agregar referencia Web (copio url) Ir – Nombre:HelloWorld
    -doble clic al botón y copio el codigo(
    Service1 service = new Service1();
    txtAns.Text = service.HelloWorld();
    -la aplicación la dejo como proyecto de inicio y le doy ejecutar
    -me dice error:
    No se puede encontrar el tipo o el nombre de espacio de nombres ‘Service1’ (¿falta una directiva using o una referencia de ensamblado?)

    me ha de faltar algo, ojala me puedas ayudar.

  3. Konfesto, si llamas al .asmx «Servicio.asmx» entonces cuando creas el objeto de esa referencia en la otra app, no deberia ser «Servicio1» deberia ser «Servicio service= new Servicio();» !!

    Espero ayudarte aunque estoy viendo esto como medio año despues

  4. Hola!!! quisisera ahcer una preguna me interesa poder hacer esto mismo pero llamar el web sevices desde una aplicacion escritorio hecha en vb 6.0. alguien que me pueda ayudar o darme una idea de como se puede implementar

  5. Paso MUCHIIIIIIIISIMO TIEMPO, pero igual quiero aportar por si a alguien le sirve :)
    El problema que tiene Konfesto es que no se debe crear el objeto de referencia usando el tipo Service1 ya que este es solo el nombre del archivo .asmx. Lo que se debe usar es el nombre con que lo dimos a conocer en la referencia que se le dio al proyecto en C#, en el caso del ejemplo es HelloWorld. Ese es el pequeño error de la explicación…
    Quedaría entonces:

    HelloWorld servicio = new HelloWorld();
    txtAns.Text = servicio.HelloWorld(); // este otro HelloWorld es el metodo que invocamos, que tiene el mismo nombre

    Es decir… usamos el nombre que le dimos como referencia, no el nombre del archivo para instanciarlo. Espero alla ayudado. Saludos.

  6. Buenas CARBALLUDE, por favor necesito me puedas ayudar con un problema con web services, necesito subir un archivo (ya sea doc, docx o pdf) el cual esta en un arreglo de bytes mediante un servicio web, funciona perfectamente cuando subo igual o menos a 64 kb cual quiera de los archivos, este archivo se almacena en oracle en una columna del tipo BLOB, la cosa es cuando quiero subir mas de 64kb (puede ser de 1 a 20mb o incluso más). se corta el servicio como si no hubiera conexión con el mismo, por favor ayúdenme…………
    Gracias……….
    Atentamente , Ruben

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *