SQL 2005 HTTP Endpoints

Hallo zusammen,

Während den Vorberitungen zur SQL2005 Prüfung habe ich mich auch mit den HTTP Endpoints von SQL 2005 befasst.

/****************************************************************************
* Zeigt die Verwendung von HTTP Endpoints unter SQL 2005
* April 2009 Andres Bohren / http://blog.icewolf.ch
****************************************************************************/

/*CREATE PROCEDURE*/
USE db_test
GO
IF EXISTS (SELECT name FROM sysobjects
         WHERE name = 'usp_kunden' AND type = 'P')
   DROP PROCEDURE usp_kunden
GO
CREATE PROCEDURE usp_kunden @nachname as varchar(50)
AS
BEGIN
 SELECT * FROM tKunden WHERE fNachname = @Nachname
END
GO

/*TEST PROCEDURE*/
EXEC dbo.usp_kunden 'Bohren'

/*RESERVE NAMESPACE*/
sp_reserve_http_namespace N'http://corp.icewolf.ch/sql'

/*HTTP ENDPOINT*/
CREATE ENDPOINT usp_kunden
STATE = STARTED
AS HTTP (
    AUTHENTICATION = ( INTEGRATED ),
 SITE = 'corp.icewolf.ch',
    PATH = '/sql/kunden',
    PORTS = ( CLEAR )
)
FOR SOAP (
  WEBMETHOD
    '/usp_kunden'
    (NAME = 'db_test.dbo.usp_kunden'),
    BATCHES = ENABLED,
 SCHEMA = STANDARD,
 DATABASE = 'db_test',
    WSDL = DEFAULT
  )


/*GRANT CONNECT*/
USE master
GO
GRANT CONNECT ON ENDPOINT::usp_kunden TO [corp\a.bohren]

/*SHOW ENDPOINTS*/
select name, endpoint_id from sys.endpoints

Hier sieht man den erstellten SOAP Endpunkt.

Mit der URL und dem ?wsdl Parameter kann man das WSDL anzeigen lassen.

Gibt man keinen Parameter ein, so erwartet einem einfach eine leere Seite. An und für sich schon klar, da hier eine SOAP Anfrage erwartet wird.

Hinzufügen des Webservices mit Visual Web Developer Express. Ein bisschen unschön ist auch, dass die Medthode ein Prefix bekommt (im Beispiel hier "_x002F_")

Mein Fazit:

Da sich der HTTP Enpoint direkt beim HTTP.SYS registriert ist die Fehlersuche recht schwierig. Ich finde es bedeutend einfacher, einen ASP.Net Webservice vorzuschalten, bei dem ich dann auch debuggen kann.

Grüsse
Andres Bohren