SQL Server’da Http Endpoint Oluşturarak IIS Olmadan WebServis Kullanmak
Bir veri tabanı uzmanı, ya da programcısı olarak hiç ummadığınız zamanlarda alakasız durumlarla karşılaşırsınız. Bazen “ne işime yarayacak ki, ben zaten onu başka yollarla da yaparım” dediğiniz şey karşınıza bir an da çıkıverir. O olmazsa olmazdır.

Herhalde SqlServer 2005 ve sonrasında gelen EndPoint ler az önce anlattığım durumlara örnek olarak verilebilir.

EndPoint nedir peki! Endpointler kullanıcılarınızın(client) servislerinize nasıl ulaşacağını berlirleyen aracılardır. Doğal olarak URL şeklinde oluşurlar. WCF’in gündemimizi işgal etmeye başlamasıyla çoğumuz bayağı ilgilenir olduk zaten.

Bu yazımda Stored Procedurelerimizi(artık SP diyeceğim) EndPoint olarak nasıl WebServis methodu gibi oluşturacağımıza ve kullanacağımıza bakacağız. Güzel yanı IIS kurulu olması gibi bir derdiniz yok. Ama eğer IIS ile Sql Server aynı portu dinliyorlarsa birinin default portunu değiştirin ya da bu örnek için IIS’i durdurun.

1.ADIM: Öncelikle aşağıdaki gibi bir tablo oluşturun

sql-serverda-httpendpoint-ile-webservis-olusturma-1

sql-serverda-httpendpoint-ile-webservis-olusturma-1

Siz varolan herhangi bir tablonuzu da kullanabilirsiniz.

2.ADIM: Aşağıdaki gibi bir SP oluşturun.
CREATE proc [dbo].[kitapIsimleriniGetir]
as
begin
select ad from kitaplar
end

3.ADIM: Şimdi sıra endpointi oluşturmaya geldi.
CREATE ENDPOINT KitaplarWebServisi
STATE = Started
AS HTTP

(

PATH = ‘/Kitaplar’,

AUTHENTICATION = (INTEGRATED),

PORTS = (CLEAR),

SITE = ‘*’

)
FOR SOAP

(

WEBMETHOD ‘kitapIsimleriniGetir’

(NAME = ‘Kitaplar.dbo.kitapIsimleriniGetir’),

WSDL = DEFAULT,

DATABASE = ‘Kitaplar’,

NAMESPACE = DEFAULT

)

Burada “http” kısmında URL’in nasıl oluşturulacağı belirlenir. PATH = ‘/Kitaplar’ localhost altında “https://localhost/kitaplar?wsdl” şeklinde bir URL olacağı anlamına gelir. Diğerleri ise tamamen güvenlikle alakalıdır.(Login,authentication mode, SSL vs.)
“SOAP” kısmında ise webMethodunuzun ismi, hangi SP’nin web method olarak kullanılacağı ve hangi veritabanının kullanılacağı belirtilir.
Çalıştırdığınız zaman EndPointimiz SERVER OBJECTS altında /EndPoints/SOAP/KitaplarWebServisi şeklinde eklenecektir.

4.ADIM: Artık yeni bir Visual Studio Projesi açıp WebServis referansı yaparak oluşturduğumuz WebServisi tüketebiliriz.
Ben bir Windows Forms Projesi oluşturuyorum ve formum üzerine bir adet ComboBox kontrolü ekliyorum.

sql-serverda-httpendpoint-ile-webservis-olusturma-2

sql-serverda-httpendpoint-ile-webservis-olusturma-2

Sonra aşağıdaki adımları takip ederek Web Servisi Referans ediyorum.

sql-serverda-httpendpoint-ile-webservis-olusturma-3

sql-serverda-httpendpoint-ile-webservis-olusturma-3

1.

2.

sql-serverda-httpendpoint-ile-webservis-olusturma-4

sql-serverda-httpendpoint-ile-webservis-olusturma-4

3. Web Servisiniz ve methodunuz geldikten sonra Add Reference butonuna tıklayarak projenize ekleyiniz.

sql-serverda-httpendpoint-ile-webservis-olusturma-5

sql-serverda-httpendpoint-ile-webservis-olusturma-5

5.ADIM: Formunuzun load eventine aşağıdaki kodları yazarak web servisi tüketiniz.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using WindowsFormsApplication25.Kitaplar;//EKLEMEYİ UNUTMAYIN

namespace WindowsFormsApplication25
{

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
KitaplarWebServisi yeni = new KitaplarWebServisi();

//Bu ismi EndPointi oluştururken vermiştik.
yeni.Credentials = System.Net.CredentialCache.DefaultCredentials;
DataTable dt = new DataTable(“kitaplar”);
dt = (yeni.kitapIsimleriniGetir()[0] as DataSet).Tables[0];

foreach (DataRow dr in dt.Rows)
{
comboBox1.Items.Add(dr[“ad”].ToString());
}
}
}
}

Sonuç:
Projenizi çalıştırdığınızda sonuç aşağıdaki gibi olacaktır.

sql-serverda-httpendpoint-ile-webservis-olusturma-6

sql-serverda-httpendpoint-ile-webservis-olusturma-6

Umarım işinizi görecektir. Diğer yazılarımda görüşmek dileğiyle.