Vamos a ver como crear un servicio web para cualquiera que sea el proposito ( en mi caso lo hare para manejar una base de datos desde una aplicacion android mediante json, pero eso lo veremos mas adelante :yum: ), utilizaremos visual studio 2013, windows communication foundation y C#. Un sencillo y facil ejemplo pero que nos ayudara a crear un servicio web basico y funcional, ademas de comprender como es el proceso de creacion y configuracion del servicio web en visual studio, asi que vamos ya a la explicacion :bowtie: ..
Escenario
Queremos crear un servicio web para x proposito, utilizaremos:
- Visual Studio 2013
- C#
- WCF ( Windows Communication Foundation ) mas de WCF en wikipedia
Que es WCF?
Windows Communication Foundation es un modelo para el desarrollo de Aplicaciones con Arquitectura SOA ( Orientada a Servicios ) de comunicacion mediante mensajes, tienen un conjunto de bibliotecas para desarrollar sistemas que envian mensajes entre servicios y clientes sobre mecanismos de transporte.
En el Modelo de WFC existe uno o varios clientes que inician la comunicacion con el servicio, este servicio espera las peticiones y responde a ellas.
Pasos basicos para crear un Servicio Web con WCF..

¿Necesitas aprender algo nuevo ? Ve a Udemy, busca el tema del que quieres aprender, selecciona el curso para ti y continua con tu aprendizaje.
Udemy- Definir la Interfaz del Contrato ( ServiceContract )
- Implementar el Contrato ( ServiceContract )
- Configurar el Servicio ( Endpoints y metadatas ) en el archivo web.config o app.config
Crear un Servicio Web en VS
Abrimos Visual Studio 2013 y seleccionamos
File -> New -> Project
En Installed -> Templates -> Visual C# -> WCF -> WCF Service Application y escribimos un nombre de proyecto, en mi caso MiServicioWeb :yum:
Una vez que se nos genere el proyecto veremos que se nos crean algunos archivos, entre ellos IService1 y Service1 los cuales eliminaremos
Como crear un Servicio Web con WCF y VS
Despues vamos a crear un nuevo servicio web ( eliminamos los anteriores para ver el proceso completo de creacion de un servicio web :yum: ), para esto vamos a dar click derecho sobre el proyecto y luego:
Add -> New Item ->
Ahora modificamos la interfaz del servicio, en mi caso lo llame Servicio asi que la interfaz se llama IServicio.cs, quedara asi:
[ServiceContract] public interface IServicio { [OperationContract] [WebInvoke(Method="GET", ResponseFormat=WebMessageFormat.Json, BodyStyle=WebMessageBodyStyle.Wrapped, UriTemplate="holaMundo/{nombre}")] String holaMundo(String nombre); }
donde definimos una funcion que recibi un String ( el nombre de la persona a la que se le saludara ) y regresa un String con el Formato «Hola Mundo {nombre} !»
Despues modificamos la implementacion de la interfaz en Servicio.svc.cs para que quede de la siguiente forma:
public class Servicio : IServicio { public String holaMundo(String nombre) { return "Hola Mundo " + nombre + "!"; } }
Ahora solo nos falta configurar el servicio, para esto modificamos el archivo Web.config
Borramos la etiqueta < behaviors > y todo sus elementos dentro de esta, ahora nos quedara asi nuestro archivo de configuracion:
<?xml version="1.0"?> <configuration> <appSettings> <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> </appSettings> <system.web> <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5"/> </system.web> <system.serviceModel> //Aqui falta algo?? <protocolMapping> <add binding="basicHttpsBinding" scheme="https" /> </protocolMapping> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> </system.serviceModel> <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> <!-- To browse web app root directory during debugging, set the value below to true. Set to false before deployment to avoid disclosing web app folder information. --> <directoryBrowse enabled="true"/> </system.webServer> </configuration>
Ahora en este espacio en blanco configuramos nuestro servicio de la siguiente manera:
<services> <service name="MiServicioWeb.Servicio" behaviorConfiguration="serviceBehavior"> <endpoint address="" binding="webHttpBinding" contract="MiServicioWeb.IServicio" behaviorConfiguration="web"></endpoint> </service> </services>
y enseguida nuestros comportamientos
<behaviors> <serviceBehaviors> <behavior name="serviceBehavior"> <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="false" /> </behavior> </serviceBehaviors> <endpointBehaviors> <behavior name="web"> <webHttp/> </behavior> </endpointBehaviors> </behaviors>
nuestro archivo de configuracion quedara asi:
<?xml version="1.0"?> <configuration> <appSettings> <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> </appSettings> <system.web> <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5"/> </system.web> <system.serviceModel> <services> <service name="MiServicioWeb.Servicio" behaviorConfiguration="serviceBehavior"> <endpoint address="" binding="webHttpBinding" contract="MiServicioWeb.IServicio" behaviorConfiguration="web"></endpoint> </service> </services> <behaviors> <serviceBehaviors> <behavior name="serviceBehavior"> <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="false" /> </behavior> </serviceBehaviors> <endpointBehaviors> <behavior name="web"> <webHttp/> </behavior> </endpointBehaviors> </behaviors> <protocolMapping> <add binding="basicHttpsBinding" scheme="https" /> </protocolMapping> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> </system.serviceModel> <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> <!-- To browse web app root directory during debugging, set the value below to true. Set to false before deployment to avoid disclosing web app folder information. --> <directoryBrowse enabled="true"/> </system.webServer> </configuration>
Ahora ejecutamos nuestro servicio y se abrira nuestro navegador, ahora escribiremos la url de nuestro servicio con el siguiente formato:
http://localhost:puerto/NombreTuServicio.svc/NombreTuMetodo/parametro
en nuestro caso
http://localhost:12138/Servicio.svc/holamundo/Jonathan
y obtendremos
Ahora podemos comunicarnos con nuestro servicio web con wcf y vs para pedirle informacion o modificaciones a la informacion, en mi caso desde una aplicacion android que publicare mas adelante :yum:
Recuerda regalarnos un +1, like, tweet, share o comentario.