14 Nisan 2010 Çarşamba

SQL Server 2005 de Web Service ( HTTP EndPoint ) Kullanımı


SQL Server 2005 ile IIS olmadan web service yayımlamak mümkün.. Bunun için SQL Server ınızın Windows 2003 / 2008 server veya XP Service Pack 2 üzerine kurulmuş olması gerekiyor.

SQL Server 2005 ile gelen native xml web servislerin nasıl kullanılacağına bir göz atalım..


AdventureWorks database inde bir procedür yaratalım

CREATE PROCEDURE Production.sp_GetProducts
AS
SELECT
ProductID,
ProductNumber,
Name,
ListPrice
FROM Production.Product

GO

Bu proc. bize tüm ürünlerin adı, numarasını ve liste fiyatını gösterecek ve bu prosedürü bir web method haline getirerek web service ile çağıracağız..

SELECT endpoint_id,name FROM sys.endpoints

Yukardaki kodu çalıştırırsanız, sistem tarafından hazırlnamış ve kullanılan endpoint listesini görebilirsiniz..


CREATE ENDPOINT GetProductsEndPoint
STATE = STARTED
AS HTTP
(
PATH = '/Product',
AUTHENTICATION = (INTEGRATED),
PORTS = (CLEAR),
SITE = 'myServerName'
)
FOR SOAP
(
WEBMETHOD 'ProductList'
(NAME='AdventureWorks.Production.sp_GetProducts'),
BATCHES = DISABLED,
WSDL = DEFAULT,
DATABASE = 'AdventureWorks',
NAMESPACE = 'http://tempUri.org/'
)
go

STATE



  • STARTED : Çalışır durumda. Dinliyor ve cevap veriyor

  • DISABLED : Devre dışı.. Dinleme ve cevap verme işlemleri çalışmıyor

  • STOPPED : Dinliyor ancak istemciden istek geldiğinde hata veriyor



HTTP de kullanılan parametreler:
- PATH = '/Product' WebService e ulaşmak için kullanacağımız virtual path. Örneğin "localhost/Product?wsdl" ile ulaşabileceğiz

- AUTHENTICATION = (INTEGRATED) :


  • INTEGRATED : En güvenilir mod. Mümkünse Kerberos-based authentication, değilse NTLM kullanır.

  • DIGEST - INTEGRATED kadar güvenli değildir. Eğer INTEGRATED kullanamıyorsunuz bu modu kullanabilirsiniz

  • BASIC - En az güvenilir moddur. INTEGRATED or DIGEST yöntemleri kullanılamıyorsa kullanılmalıdır. PORT değeri (SSL) olursa çalışır




- PORTS = (CLEAR),



  • CLEAR : HTTP (default 80) port

  • SSL : HTTPS (default 443)




- SITE = 'myServerName' -- Web service in çalışağı makinenin adıdır.. Direk makine ismi verilir. myServerMyInstance gibi bir SQL server instance yarattıysanız ve host unuz bu server olacaksa bile SITE = myServer verilmelidir.


"http://myServerName/Product?wsdl" web service imizi çalışacağı adres.

Şimdi de bunu nasıl çağıracağımızı basit bir asp.net örneği görelim..



  1. Visual Studio 2005 i açın ve yeni bir web projesi oluşturun..

  2. Projenin üzerine sağ tuş ile gelen menüden "Add Web Reference" a tıklayın..

  3. URL'ye "http://myServerName/Product?wsdl" yazın ve "GO" ya basın.. Bu web service de tanımlı web method ların listesini göreceksiniz. Biz sadece "ProductList" isimli bir method oluşturmuştuk..

  4. WebReference name kutusuna "Products" yazın ve "Add Reference" butonuna basın..



Solution Explorer da App_WebReferences>Products>Product.discomap ve App_WebReferences>Products>Product.wsdl isimli 2 dosya eklendiğini göreceksiniz..

Yeni bir web sayfası ekleyin..
Üzerine bir GridView nesnesi ekleyip ID'sini "grdProducts" olarak değiştirin..

Bir button ekleyin ve ID sini "btnLoadProducts" olarak değiştirin.. Butonun onclick ine kod yazacağız ve grid i dolduracağız..

protected void btnLoadProducts_Click(object sender, EventArgs e)
{
Products.GetProductsEndPoint productEndPoint = new Products.GetProductsEndPoint();
productEndPoint.Credentials = System.Net.CredentialCache.DefaultCredentials;

object[] result = productEndPoint.ProductList();

foreach (object o in result)
{
if (o is DataSet)
{
grdProducts.DataSource = (o as DataSet).Tables[0];
grdProducts.DataBind();
break;
}
}
}

Web Method çağırıldığı zaman bir object array döner. Array in itemlarından bir tanesi de webmethod dan dönen tüm resultset i dataset olarak verir. Biz tek bir recordset döndürdüğümüz için DataSet içerisinde 1 tane DataTable taşıyacaktır. Bu datatable ı , grid in source olarak gösterdiğimizde işimiz bitmiş oluyor..

Hiç yorum yok: