Makale Özeti

Bu yazımızda SQL Server 2005 Native HTTP Support özelliğini inceleyeceğiz.

Makale




SQL Server 2005 Native HTTP Support

Native HTTP Support özelliği , SQL Server 2005’in getirdiği önemli yeniliklerden biridir. Basit bir mantıkla SQL Server içindeki T-SQL sorgularımızı, User Defined Function veya Stored Procedure’larımızı dış uygulamalarla paylaşmamızı sağlar.

Bunu gerçekleştirebilmek için SQL Server üzerinde HTTP EndPoint’ler oluşturularak işe başlanmalıdır. EndPoint’leri bu noktada bir iletişim noktası olarak düşünebiliriz. HTTP.sys isimli sistem dosyası bu iletişim noktası üzerinden gelen istekleri alarak geri cevap döner. Bunun sonunda SQL Server, aynı bir Web Service gibi WSDL dökumanı oluşturarak istemci makinelerinden proxy oluşturulmasını ve işlemlerin gerçekleştirilebilmesini sağlar.

Yani SQL Server’ı içinde bulundurduğu prosedür, fonksiyon veya sorgu cümlelerini Web Service gibi dış uygulamalara sunan bir yapıya kavuşturmuş oluyoruz.

Basit bir örnekle kavramı somutlaştıralım.

Öncelikle HTTP Endpoint oluşturuyoruz:

CREATE ENDPOINT sql_AdventureWorks
STATE = STARTED
AS HTTP(
    PATH = '/sql/AdventureWorks', AUTHENTICATION = (INTEGRATED),
    PORTS = (CLEAR) )
FOR SOAP (
    WEBMETHOD 'GetProducts'
    (name='AdventureWorks.Production.GetProducts',
    schema=STANDARD),
    WEBMETHOD 'GetProductsNoSchema'
       (name= 'AdventureWorks.Production.GetProducts',
       schema=NONE),
    WSDL = DEFAULT,
    BATCHES = ENABLED,
    DATABASE = 'AdventureWorks',
    NAMESPACE = 'http://AdventureWorks/' )


http://localhost/sql/AdventureWorks?WSDL adresinden WSDL dökumantasyonunu incelemek mümkündür.

SQL tarafında yapılacak işlemler ilk etapta bunlardır. Bu işlemlerin sonunda iletişim noktası olan Endpoint’i oluşturmuş oluyoruz. AdventureWorks veritabanı üzerinde Production schemasına ait olan GetProducts prosedürünü bir Web Method gibi kullanıma açmış olduk.

Bundan sonrası .NET client’ında bu web method’u kullanmak isteyen bir programa kalıyor. Add Web Reference demek suretiyle Sql üzerindeki bu prosedürden faydalanabileceğiz.

Yeni bir Visual Studio.NET projesi yarattıktan sonra Add Web Reference seçip bir proxy sınıfı yaratacağız. Add Web Reference penceresinde adres olarak örneğimiz gereği http://localhost/sql/AdventureWorks?WSDL belirtilmelidir. Sonrasında oluşturacağımız proxy instance’ı ile de web service’ini çağırıp kullanabileceğiz.

AdventureWorks.sql_AdventureWorks proxy = new AdventureWorks.sql_AdventureWorks();
proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
object[] results = proxy.GetProducts; // nesnemizin adı Proxy, methodumuzun yani sp’nin adı GetProducts


Satırları ile başladıktan sonra GetProducts prosedürü içinde aşağıdaki örneğe benzer bir kod yazarak istenen amaç doğrultusunda prosedürlerden faydalanılabilir.

//Visual C#
if (results[0].ToString() == "System.Data.DataSet")
{
    DataSet ds = (DataSet) results[0];    //processing of DataSet
}

if (results[1].ToString() == "TestHarnessCS.AdventureWorks.SqlRowCount")
{
    AdventureWorks.SqlRowCount rowcount = (AdventureWorks.SqlRowCount) results[1];     //processing of rowcount
}


HTTP Support özelliğinin programlanabilir SQL parçalarını dış uygulamalar tarafından referans edilerek nasıl kullanılabildiğini görmüş olduk.
Bir sonraki yazımızda görüşmek üzere.

Sorularınız için onur.kulabas@bilgeadam.com