jueves, 14 de octubre de 2010

Como crear un endpoint en SQL Server 2005

 

Hola a todos para los que, actualmente vemos en el internet, blogs, anuncios revistas las ventajas que brinda SQL Server 2008 y su nuevo release SQL Server 2008 R2; existen empresas que no han migrado sus aplicaciones o servidores de base de datos a la nueva versión y que continúan utilizando SQL Server 2005.

Este post es para esas personas que siguen trabajando en SQL Server 2005.

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.

 

Bueno espero les sea de gran ayuda como le fue para mi hoy.

 

Saludos

 

Julio Valencia

lunes, 11 de octubre de 2010

ANSI NULL

El famoso ANSI NULL


Hola como están todos, hoy navegando por el Internet mientras buscaba solución a un error que me salía al instalar SQL Server 2008 R2, me encontré con el post de una persona donde hacía una pregunta sencilla pero nadie le contesto.

Que hace o para que sirve activar en las opciones de una base de datos la opción ANSI NULL.

En resumidas cuentas lo que hace es indicar al motor al momento de crear una columna en una tabla si esta acepta valores nulos o no.

Para explicar mejor esto les pongo un ejemplo.

Si tuvieramos esta opción apagada, el siguiente query indicaria que todas sus columnas no aceptan valores nulos, es decir es equivalente a que tengan Not Null


create table dbo.Usuarios
(
Id int ,
Nombre varchar(50)
)

Lo anterior con ANSI NULL apagado es como decir:

create table dbo.Usuarios
(
Id int NOT NULL ,
Nombre varchar(50) NOT NULL
)

Por lo contrario si tenemos activada la opción de ANSI NULL el ejemplo anterior es equivalente a:

create table dbo.Usuarios
(
Id int NULL ,
Nombre varchar(50) NULL
)

Espero esto les sea de gran ayuda ya que es importante saber esto al momento de diseñar una base de datos.


Saludos,

Julio Valencia

Location:Hurtado,Guayaquil,Ecuador