Creando	
  Endpoint	
  HTTP	
  

	
  

Muchas	
  veces	
  necesitas	
  crear	
  un	
  web	
  services	
  para	
  que	
  otras	
  aplicaciones	
  se	
  
comuniquen	
  con	
  nosotros	
  y	
  asi	
  tener	
  varias	
  aplicaciones	
  compartiendo	
  información	
  
permitiendo	
  así	
  que	
  los	
  procesos	
  de	
  la	
  empresa	
  fluyan	
  porque	
  todas	
  sus	
  aplicaciones	
  
estan	
  comunicandose.	
  

Pero	
  en	
  los	
  momentos	
  donde	
  tenemos	
  que	
  un	
  web	
  services	
  en	
  .net	
  no	
  hace	
  nada	
  
simplemente	
  pasarle	
  los	
  datos	
  a	
  un	
  stored	
  procedure,	
  nos	
  lleva	
  a	
  pensar	
  si	
  en	
  realidad	
  
es	
  necesario	
  crear	
  este	
  web	
  service?,	
  es	
  necesario	
  crear	
  este	
  componente	
  para	
  solo	
  
publicar	
  el	
  procedimiento	
  de	
  mi	
  base??	
  

Es	
  aquí	
  conde	
  los	
  endpoints	
  nos	
  pueden	
  ayudar,	
  es	
  una	
  manera	
  de	
  publicar	
  un	
  
procedimiento	
  almacenado	
  como	
  web	
  services	
  tan	
  solo	
  con	
  una	
  sentencia	
  sql	
  como	
  la	
  
siguiente:	
  

create	
  endpoint	
  ReqInsXml	
  
	
  	
  	
  	
  state	
  =	
  started	
  
as	
  http	
  
(	
  
	
  	
  	
  	
  path	
  =	
  '/App/ReqInsXml',	
  
	
  	
  	
  	
  authentication	
  =	
  (digest),	
  
	
  	
  	
  	
  ports	
  =	
  (clear),	
  
	
  	
  	
  	
  site	
  =	
  'testdomain.com'	
  
)	
  
for	
  soap	
  
(	
  
	
  	
  	
  	
  webmethod	
  'ReqInsXml'	
  
	
  	
  	
  	
  	
  	
  	
  	
  (name=AppDb.dbo.sprReqInsXmlV2'),	
  
	
  	
  	
  	
  batches	
  =	
  disabled,	
  
	
  	
  	
  	
  login_type	
  =	
  windows,	
  
	
  	
  	
  	
  wsdl	
  =	
  default,	
  
	
  	
  	
  	
  database	
  =	
  'AppDb',	
  
	
  	
  	
  	
  namespace	
  =	
  'http://tempUri.org/'	
  
)	
  

	
  

	
  

	
  

	
  

	
  
Ahora	
  expliquemos	
  lo	
  que	
  hace:	
  

Lo	
  primero	
  creo	
  que	
  es	
  lo	
  suficientemente	
  explicito,	
  es	
  el	
  comando	
  para	
  crear	
  el	
  
endpoint	
  e	
  ReqInsxml	
  es	
  el	
  nombre.	
  

state	
  	
  =	
  indica	
  si	
  al	
  crearlo	
  se	
  inicia	
  o	
  no	
  el	
  endpoint.	
  

as	
  http=	
  lo	
  que	
  indica	
  es	
  que	
  va	
  utilizar	
  el	
  puerto	
  80	
  para	
  comunicarse	
  tal	
  como	
  lo	
  hace	
  
un	
  web	
  service.	
  

el	
  path	
  es	
  la	
  ruta	
  del	
  webservice,	
  ojo	
  es	
  importante	
  algo	
  que	
  notar	
  aqui.	
  Digamos	
  que	
  
tengan	
  una	
  aplicacion	
  dentro	
  del	
  Directorio	
  /App	
  en	
  su	
  servidor	
  web	
  si	
  yo	
  solo	
  dejo	
  en	
  
path	
  /App,	
  entonces	
  cualquier	
  peticion	
  a	
  http://testdomain.com/App	
  ya	
  no	
  resolverá	
  
la	
  aplicacion,	
  lo	
  que	
  resolveria	
  sera	
  el	
  Endpoint,	
  por	
  eso	
  hay	
  que	
  tener	
  cuidado.	
  

authentication	
  es	
  para	
  indicar	
  si	
  es	
  basic,	
  digest,	
  integrated	
  (windows	
  authentication),	
  
kerberos.	
  

ports	
  si	
  esta	
  clear	
  significa	
  http,	
  caso	
  contrario	
  utilicen	
  SSL	
  para	
  https,	
  ojo	
  van	
  a	
  tener	
  
que	
  instalar	
  un	
  certificado	
  para	
  utilizar	
  SSL.	
  

site	
  =	
  en	
  este	
  ejemplo	
  es	
  por	
  decir	
  un	
  dominio	
  o	
  algo	
  como	
  localhost.	
  

for	
  soap,	
  es	
  para	
  que	
  se	
  genere	
  el	
  soap	
  envelope.	
  

webmethod	
  es	
  para	
  indicar	
  el	
  webservice	
  en	
  si,	
  y	
  la	
  propiedad	
  name	
  es	
  el	
  nombre	
  del	
  
procedimiento	
  almacenado	
  o	
  funciona	
  sql	
  que	
  se	
  va	
  a	
  publicar.	
  

batches	
  es	
  para	
  indicar	
  si	
  maneja	
  batches	
  de	
  pedidos	
  o	
  no.	
  

login_type	
  puede	
  ser	
  Mixed	
  o	
  Windows,	
  mixed	
  significa	
  que	
  en	
  lugar	
  de	
  usar	
  un	
  
usuario	
  windows,	
  utilizan	
  un	
  usuario	
  sql	
  o	
  tambien	
  uno	
  windows.	
  	
  Ojo	
  aqui	
  es	
  
importante	
  saber	
  si	
  el	
  servidor	
  SQL	
  permite	
  autenticacion	
  mixed,	
  es	
  decir	
  utilizar	
  
usuarios	
  SQL	
  caso	
  contrario	
  si	
  solo	
  permite	
  windows,	
  al	
  configurar	
  endpoint	
  para	
  
mixed	
  va	
  dar	
  un	
  error.	
  

wsdl	
  =	
  es	
  el	
  web	
  service	
  definition	
  language,	
  que	
  es	
  basicamente	
  una	
  descripcion	
  del	
  
servicio	
  web.	
  Default	
  es	
  decir	
  que	
  utilice	
  el	
  formato	
  de	
  sql	
  predeterminado	
  o	
  nosotros	
  
podemos	
  dar	
  otro	
  tipo.	
  

database	
  =	
  la	
  base	
  de	
  datos	
  a	
  la	
  que	
  va	
  a	
  pertenecer	
  este	
  endpoint.	
  

namaespace	
  es	
  el	
  namespace	
  xml	
  con	
  el	
  que	
  se	
  generara	
  el	
  wsdl	
  

Creando endpoint http

  • 1.
    Creando  Endpoint  HTTP     Muchas  veces  necesitas  crear  un  web  services  para  que  otras  aplicaciones  se   comuniquen  con  nosotros  y  asi  tener  varias  aplicaciones  compartiendo  información   permitiendo  así  que  los  procesos  de  la  empresa  fluyan  porque  todas  sus  aplicaciones   estan  comunicandose.   Pero  en  los  momentos  donde  tenemos  que  un  web  services  en  .net  no  hace  nada   simplemente  pasarle  los  datos  a  un  stored  procedure,  nos  lleva  a  pensar  si  en  realidad   es  necesario  crear  este  web  service?,  es  necesario  crear  este  componente  para  solo   publicar  el  procedimiento  de  mi  base??   Es  aquí  conde  los  endpoints  nos  pueden  ayudar,  es  una  manera  de  publicar  un   procedimiento  almacenado  como  web  services  tan  solo  con  una  sentencia  sql  como  la   siguiente:   create  endpoint  ReqInsXml          state  =  started   as  http   (          path  =  '/App/ReqInsXml',          authentication  =  (digest),          ports  =  (clear),          site  =  'testdomain.com'   )   for  soap   (          webmethod  'ReqInsXml'                  (name=AppDb.dbo.sprReqInsXmlV2'),          batches  =  disabled,          login_type  =  windows,          wsdl  =  default,          database  =  'AppDb',          namespace  =  'http://tempUri.org/'   )            
  • 2.
    Ahora  expliquemos  lo  que  hace:   Lo  primero  creo  que  es  lo  suficientemente  explicito,  es  el  comando  para  crear  el   endpoint  e  ReqInsxml  es  el  nombre.   state    =  indica  si  al  crearlo  se  inicia  o  no  el  endpoint.   as  http=  lo  que  indica  es  que  va  utilizar  el  puerto  80  para  comunicarse  tal  como  lo  hace   un  web  service.   el  path  es  la  ruta  del  webservice,  ojo  es  importante  algo  que  notar  aqui.  Digamos  que   tengan  una  aplicacion  dentro  del  Directorio  /App  en  su  servidor  web  si  yo  solo  dejo  en   path  /App,  entonces  cualquier  peticion  a  http://testdomain.com/App  ya  no  resolverá   la  aplicacion,  lo  que  resolveria  sera  el  Endpoint,  por  eso  hay  que  tener  cuidado.   authentication  es  para  indicar  si  es  basic,  digest,  integrated  (windows  authentication),   kerberos.   ports  si  esta  clear  significa  http,  caso  contrario  utilicen  SSL  para  https,  ojo  van  a  tener   que  instalar  un  certificado  para  utilizar  SSL.   site  =  en  este  ejemplo  es  por  decir  un  dominio  o  algo  como  localhost.   for  soap,  es  para  que  se  genere  el  soap  envelope.   webmethod  es  para  indicar  el  webservice  en  si,  y  la  propiedad  name  es  el  nombre  del   procedimiento  almacenado  o  funciona  sql  que  se  va  a  publicar.   batches  es  para  indicar  si  maneja  batches  de  pedidos  o  no.   login_type  puede  ser  Mixed  o  Windows,  mixed  significa  que  en  lugar  de  usar  un   usuario  windows,  utilizan  un  usuario  sql  o  tambien  uno  windows.    Ojo  aqui  es   importante  saber  si  el  servidor  SQL  permite  autenticacion  mixed,  es  decir  utilizar   usuarios  SQL  caso  contrario  si  solo  permite  windows,  al  configurar  endpoint  para   mixed  va  dar  un  error.   wsdl  =  es  el  web  service  definition  language,  que  es  basicamente  una  descripcion  del   servicio  web.  Default  es  decir  que  utilice  el  formato  de  sql  predeterminado  o  nosotros   podemos  dar  otro  tipo.   database  =  la  base  de  datos  a  la  que  va  a  pertenecer  este  endpoint.   namaespace  es  el  namespace  xml  con  el  que  se  generara  el  wsdl