You are on page 1of 7

24/7/2015

ServiciosWCF:ConsumirporRESTySOAPsimultaneamenteeledwin.com

ServiciosWCF:ConsumirporRESTy
SOAPsimultaneamente

Publicadoel17/05/2014|1847visitas

Regresandonuevamentedeunosdasconmucho
trabajoquierocompartirconustedesestetutorial
paraconstruirunserviciowebcontecnologa
WCFyloexpondremosporSOAPyREST
simultneamente.

Antesdeiralcdigoprestemosatencinalaimagenanterior.Normalmenteestoseraloqueyohago
situvieraqueexponerinformacinhaciaunoovariosaplicativosenmismasodiferentesplataformas
ytecnologas.
Pararealizarestetutorialvamosasuponerqueesunsistemadecomprasonlineyvamosaexponer
unaAPIpublicaparaconsultadeproductos.
VamosaexponerporSOAPhaciaunaaplicacindeescritorioyporRESThaciaunsitioWebque
consumiremosporAjax.

data:text/htmlcharset=utf8,%3Ch1%20style%3D%22margin%3A%200px%3B%20padding%3A%200px%3B%20fontfamily%3A%20Oswald%2C%20Ari

1/7

24/7/2015

ServiciosWCF:ConsumirporRESTySOAPsimultaneamenteeledwin.com

EntendiendolosconceptosbsicosWCF,
SOAPyREST
Yaquenoestemadeestetutorialcontextualizarnossobreestastecnologasvoysimplementeacitar
algunossitiosdondepodrnconocerencasodequenotenganniideadequesetrataesto.

WCF
QueesWindowsCommunicationFoundation[ingls]
WindowsCommunicationFoundationWikipedia[ingls]

SOAP
SimpleObjectAccessProtocolWikipedia

REST
RepresentationalStateTransfer
Sabiendoesto,vamosainiciarlaconstruccindenuestropequeoproyectoenVisualStudio2010y
Framework4.0osuperior.
VamosacrearunanuevaaplicacinWebvaciaoASP.NETEmptyWebApplicationqueyo
llamarMiMercado.

Eneste,creareunacarpetallamadaServicesyenestacarpetavoyacrearmiServicioWCFhaciendo
clicderechosobrelacarpeta,Aadir,Nuevoelementoybuscamos"ServicioWCFHabilitadopara
AJAX"o"AJAXenabledWCFService"quellamaremos"MiMercadoService.svc".
data:text/htmlcharset=utf8,%3Ch1%20style%3D%22margin%3A%200px%3B%20padding%3A%200px%3B%20fontfamily%3A%20Oswald%2C%20Ari

2/7

24/7/2015

ServiciosWCF:ConsumirporRESTySOAPsimultaneamenteeledwin.com

EstenoesmsqueunservicioWCFcomn,loquepasaalcrearunserviciohabilitado
paraAJAXesqueseaadenalgunosatributosadicionalesenelarchivodeconfiguracin
eInterfaz,propiedadesyconfiguracionesquepodemosaadirmanualmentesinningn
inconveniente.

Quetenemosalcrearelnuevoservicio
WCF?
ArchivoMiMercadoService.svc.cs
Estearchivoeslaimplementacindelservicioweb.Aquiseespecificancadaunodelosmtodosu
Operacionesdecontrato(OperationContract).Cadaunodeestosmtodosserexpuestosiemprey
cuandotengalapropiedad[OperationContract]sobreelmismo.Comoejemplotenemosel
mtodopublicvoidDoWork().
Adicionalmente,veamosqueenladefinicindelaclasetenemosotraspropiedadesque
sonServiceContractyAspNetCompatibilityRequirements,estesegundohabilitala
compatibilidadconASP.NET.

ArchivoWeb.Config
Aquipodemosevidenciarquesehacreadounnuevoniveldeconfiguracin
llamadosystem.serviceModel,aquseconfiguranlosserviciosWCF.
Tenemoslosservicesquesonladefinicindecadaunodelosserviciosquetengamos,
losbehaviorssonlaconfiguracindeloscomportamientosdeestosserviciosy
data:text/htmlcharset=utf8,%3Ch1%20style%3D%22margin%3A%200px%3B%20padding%3A%200px%3B%20fontfamily%3A%20Oswald%2C%20Ari

3/7

24/7/2015

ServiciosWCF:ConsumirporRESTySOAPsimultaneamenteeledwin.com

finalmenteserviceHostingEnvironmentquenospermiteestablecerparmetrosdeconfiguracin
paraelhostdeserviciosengeneral.

ConfigurarEndPointRESTySOAPen
WCF
EnWCFexisteunconceptollamadoEndPoint,estoenpalabrassimplessonpuntosdeaccesoenel
servidor,podemosverlocomoejecutarunescuchadordesolicitudes.Enestecasocrearemos
unEndPointpararecibirlassolicitudesRESTyotroparalassolicitudesSOAP.Parahacerestonos
ubicamosenlaseccindeservicesdelarchivoweb.config.Encontraremosalgosimilaraesto:

<services>
<servicename="MiMercado.Services.MiMercadoService">
<endpointaddress=""behaviorConfiguration="MiMercado.Services.MiMerc
</service>
</services>

EsteEndPointexistenterecibesolicitudesRESTyaquetieneelwebHttpBindinglonicoque
haremosesestablecerunaddressparaquepormediodelaurldelserviciopodamosdiferenciareste
EndPointconelotroquevamosacrearenseguida.
Noexplicareladdressporahora,perosuusoserevidentecuandoconsumamoselservicio,asque
notepreocupes.
Alatributoaddresspondremoselvalor"rest",queperfectamentepuedesercualquiervalorque
desees.NuestroendPointquedaras:

<endpointaddress="rest"behaviorConfiguration="MiMercado.Services.MiMercadoS

Enlaseccin<endpointBehaviors>encontramosunaetiqueta<enableWebScript/>lacual
debemosreemplazarpor<webHttphelpEnabled="true"/>
<endpointBehaviors>
<behaviorname="MiMercado.Services.MiMercadoServiceAspNetAjaxBehavior">
<webHttphelpEnabled="true"/>
</behavior>
</endpointBehaviors>

AhorayatenemosnuestroserviciolistoparaserconsumidoporREST.Cmoloindicaba
anteriormente,debemoscrearunEndPointparaSOAP,asqueaadiremosunonuevo,exactamente
despusdelqueyatenemoscreadoparaREST.
Todoquedaras:
data:text/htmlcharset=utf8,%3Ch1%20style%3D%22margin%3A%200px%3B%20padding%3A%200px%3B%20fontfamily%3A%20Oswald%2C%20Ari

4/7

24/7/2015

ServiciosWCF:ConsumirporRESTySOAPsimultaneamenteeledwin.com

<services>
<servicename="MiMercado.Services.MiMercadoService"behaviorConfiguration
<endpointaddress="rest"behaviorConfiguration="MiMercado.Services.Mi
<endpointaddress=""binding="basicHttpBinding"contract="MiMercado.S
</service>
</services>

Comopuedenver,esteltimoEndPointnotieneunaddress(podemosponerleunoperoparafines
prcticosmegustasinl),elbindingesdiferente(basicHttpBinding)yhemosquitadoel
atributobehaviorConfiguration.Esteltimoesopcionalypodemosestablecerloparahacer
configuracionesmsavanzadasqueparaestetutorialnonecesitamos.
Siestsponiendobuenaatencinnotarsquetambinagregamosunatributoala
etiqueta<service>llamadobehaviorConfiguration,estoservirparaespecificarun
comportamientodiferentealservicio.
YaqueestablecimoselvalorDefaultBehaviordebemosdefinirestebehaviorenlaseccin
de<serviceBehaviors>queporcierto,debemosaadirlainmediatamentedespus(oantes)dela
seccin<endpointBehaviors>.Parafinalizar,nuestroserviceModelquedadelasiguientemanera:

<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behaviorname="MiMercado.Services.MiMercadoServiceAspNetAjaxBeha
<webHttphelpEnabled="true"/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behaviorname="DefaultBehavior">
<serviceMetadatahttpGetEnabled="true"/>
<serviceDebugincludeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironmentaspNetCompatibilityEnabled="true"multipleSite
<services>
<servicename="MiMercado.Services.MiMercadoService"behaviorConfigura
<endpointaddress="rest"behaviorConfiguration="MiMercado.Service

Aadirfuncionalidadalservicio
TenemosunserviciowebWCFquerespondeasolicitudesSOAPyREST,perosolotieneunmtodo
DoWork()quenohacenadabien,latareaahoraescrearfuncionesquehaganalgo,ycomoestamos
haciendounatiendapuesloinicialserretornarunalistadeproductos.
Paracomenzar,creemosunaclasequenostransportarlainformacin,estalallamaremosProducto
data:text/htmlcharset=utf8,%3Ch1%20style%3D%22margin%3A%200px%3B%20padding%3A%200px%3B%20fontfamily%3A%20Oswald%2C%20Ari

5/7

24/7/2015

ServiciosWCF:ConsumirporRESTySOAPsimultaneamenteeledwin.com

[DataContract]
publicclassProducto
{
[DataMember]
publicintProductoID{get;set;}
[DataMember]
publicstringNombre{get;set;}
[DataMember]
publicdoublePrecio{get;set;}
}
Alasclasesconlasquevamosatransportarinformacindebemosagregarlela
propiedad[DataContract]yacadaatributodelaclaseel[DataMember].
Ahoravamosacrearunmtodoqueretorneunalistadeproductos.

[WebGet(UriTemplate="/productos",ResponseFormat=WebMessageFormat.Json)]
[OperationContract]
publicList<Producto>ListarProductos()
{
//Crearlistadeproductosyaadirelementos
List<Producto>productos=newList<Producto>();
productos.Add(newProducto()
{
ProductoID=0,
Nombre="MotorolaMotoG",
Precio=4500000
});
productos.Add(newProducto()
{
ProductoID=1,
Nombre="SonyVaioUltra",
Precio=950000
});
Bien,tenemosunmtodocomnycorrientecondospropiedades"extraas":
[OperationContract]quenospermitehabilitarelmtodoparaqueseaexpuestopormediodel
servicio,estonosdicequesinestapropiedadnopodramosinvocarloyaquenoestaradisponible.
[WebGet]exponeesteservicioparaunasolicitudHTTPGET(SilestesobreRESTsabrsmaso
menosdequesetrata).ParaestoespecificamosunUriTemplateconvalor"/productos"paraquepor
mediodelaurlinvoquemoslocalhost/productosenlugardelocalhost/ListarProductos.

Laconfiguracin[WebGet]y[WebInvoke]sonnicamenteparaREST,siquieres
trabajarsimplementeconSOAPnonecesitasestablecerestaspropiedades.

data:text/htmlcharset=utf8,%3Ch1%20style%3D%22margin%3A%200px%3B%20padding%3A%200px%3B%20fontfamily%3A%20Oswald%2C%20Ari

6/7

24/7/2015

ServiciosWCF:ConsumirporRESTySOAPsimultaneamenteeledwin.com

AhorapodemosprobarnuestromtododeconsultaejecutandonuestroproyectoWeb.

CmoprobarservicioWebRESTySOAP
ParaprobarunservicioRESTexistenvariasherramientasdeusolibreymuybuenasquepodemos
utilizar,entrelasqueheexploradoencuentrolassiguientescomoaplicacionesdeGoogle
Chrome:PostmanRestClient,RestConsole,AdvancedRestClient.Encontrarsmuchasmsynosolo
paraGoogleChrome,tambinparaFirefoxyparaescritorio,escuestindebuscar.
ParasolicitudesRESTdetipoGETtambinpuedesutilizarelexploradordeInternetas:

data:text/htmlcharset=utf8,%3Ch1%20style%3D%22margin%3A%200px%3B%20padding%3A%200px%3B%20fontfamily%3A%20Oswald%2C%20Ari

7/7

You might also like