SQL Server Web Servis Çağırma

SQL Server Web Servis Çağırma

      Bu yazıda sizler ile SQL Server’da web servis çağırma işlemini anlatacağım fakat bu işlemi anlatmadan önce web servisi kısa ve basit olarak açıklamak istiyorum, web servis: bize ait verileri bizim haricimizdeki kaynaklar ile paylaşmamızı sağlayan bir yöntemdir, iki kaynak arasında veri alış verişi sağlar. Burada oldukça basit bir tanım yaptım çünkü bu yazıyı okuyorsanız daha fazlasını biliyorsunuz demektir.

1. SQL Serverda Ayarları

     SQL Server da web servis çağırmadan önce aşağıdaki ayarları yapmanız gerekmektedir. Bu ayarlardan sonra web servis çağırma işlemini yapabileceğiz. Bu ayarların ne işe yaradığını aşağıda açıklamıştır. 

Use master  
 
sp_configure 'show advanced options', 1;   
 
RECONFIGURE
 
sp_configure 'Ole Automation Procedures', 1;   
 
RECONFIGURE
 
sp_configure 'show advanced options', 1;   
 
RECONFIGURE; 
sp_configure

sp_configure sytem prucedure
geçerli sunucu için ayarları görüntüler ve bu yarlarda değişiklik yapmanızı sağlar.
‘option_name’ ve ‘value’ şeklinde iki parametre alabilir.

  • RECONFIGURE sunucunun yediden yapılandırılmasını sağlar.
  • "show advanced option" gelişmiş seçeneklerin ayarlanması sağlar.
  • "Ole Automation Procedures" Ole otomasyon sisteminin kullanılması için açılır.

"show advanced option" seçeneği 1 olarak ayarlandığında bu ayar tüm kullanıcılar için geçerlidir. Bu durumu geçici olarak kullanmanız önerilir.

 

 

2. OLE Automation Procedures

sp_OACreate

     Bir OLE nesnesinin örneğini oluşturmanıza olanak tanır. ve yeni oluşturulan OLE nesnesi, Transact-SQL deyimi toplu işleminin sonunda otomatik olarak yok edilir.

sp_OACreate { progid | clsid } , objecttoken OUTPUT [ , context ]  
sp_OAMethod

Bir OLE nesnesinin yöntemini çağırmanıza izin verir.

sp_OAMethod objecttoken , methodname  
    [ , returnvalue OUTPUT ]   
    [ , [ @parametername = ] parameter [ OUTPUT ] [ ...n ] ]   
sp_OADestroy

Oluşturulan bir OLE nesnesini yok eder. sp_OACreate yönteminde belirtildiği gibi eğer sp_OADestroy çağrılmazsa oluşturulan OLE nesnesi toplu işlemin sonunda otomatik olarak yok edilir. Şimdi yukarıdaki metotları kullanarak bir servis çağıralım ve bu servisi bir sp haline getirelim.

sp_OADestroy objecttoken      

3. Servisin Yazılması

     Aşağıda Microsoft SQL serverda yazmış olduğumuz servisimizi bir procedure haline getirdik. Başka spyi işlemlerde de kullnabiliriz.

  1. CREATE proc [dbo].[spHTTPRequest_ali]
  2. @URI varchar(2000) ,
  3. @methodName varchar(50) ,
  4. @requestBody varchar(8000) ,
  5. @responseText varchar(8000) output
  6. AS
  7. SET NOCOUNT ON
  8. IF @methodName = ''
  9. BEGIN
  10. select FailPoint = 'Method Name must be set'
  11. RETURN
  12. END
  13.  
  14. DECLARE @Object AS INT
  15. DECLARE @hResult int
  16. DECLARE @source varchar(255), @desc varchar(255)
  17.  
  18. EXEC @hResult = sp_OACreate 'MSXML2.XMLHTTP', @Object OUT
  19.  
  20. IF @hResult <> 0
  21. BEGIN
  22. EXEC sp_OAGetErrorInfo @Object, @source OUT, @desc OUT
  23. SELECT hResult = convert(varbinary(4), @hResult),
  24. source = @source,
  25. description = @desc,
  26. FailPoint = 'XMLHTTP Create failed',
  27. MedthodName = @methodName
  28. GOTO destroy
  29. RETURN
  30. END
  31.  
  32. EXEC @hResult = sp_OAMethod @Object, 'open', NULL, @methodName ,@URI, 'false'
  33.  
  34. IF @hResult <> 0
  35. BEGIN
  36. EXEC sp_OAGetErrorInfo @Object, @source OUT, @desc OUT
  37. SELECT hResult = convert(varbinary(4), @hResult),
  38. source = @source,
  39. description = @desc,
  40. FailPoint = 'XMLHTTP Open failed',
  41. MedthodName = @methodName
  42. GOTO destroy
  43. RETURN
  44. END
  45.  
  46. EXEC @hResult = sp_OAMethod @Object, 'setRequestHeader', null, 'Content-Type', 'application/json'
  47.  
  48. IF @hResult <> 0
  49. BEGIN
  50. EXEC sp_OAGetErrorInfo @Object, @source OUT, @desc OUT
  51. SELECT hResult = convert(varbinary(4), @hResult),
  52. source = @source,
  53. description = @desc,
  54. FailPoint = 'SetRequestHeader failed',
  55. MedthodName = @methodName
  56. GOTO destroy
  57. RETURN
  58. END
  59.  
  60.  
  61. EXEC @hResult=sp_OAMethod @Object, 'send', null, @requestBody
  62.  
  63. IF @hResult <> 0
  64. BEGIN
  65. EXEC sp_OAGetErrorInfo @Object, @source OUT, @desc OUT
  66. SELECT hResult = convert(varbinary(4), @hResult),
  67. source = @source,
  68. description = @desc,
  69. FailPoint = 'Send failed',
  70. MedthodName = @methodName
  71. GOTO destroy
  72. RETURN
  73. END
  74.  
  75. EXEC @hResult= sp_OAMethod @Object, 'responseText', @responseText OUTPUT
  76. IF @hResult <> 0
  77. BEGIN
  78. EXEC sp_OAGetErrorInfo @Object, @source OUT, @desc OUT
  79. SELECT hResult = convert(varbinary(4), @hResult),
  80. source = @source,
  81. description = @desc,
  82. FailPoint = 'ResponseText failed',
  83. MedthodName = @methodName
  84. GOTO destroy
  85. RETURN
  86. END
  87.  
  88. IF CHARINDEX('false',(SELECT @responseText)) > 0
  89. BEGIN
  90. SELECT @responseText As 'Message'
  91. END
  92. ELSE
  93. BEGIN
  94. SELECT @responseText As 'Employee Details'
  95. END
  96.  
  97. destroy:
  98. EXEC sp_OADestroy @Object

4. Servisin Çağrılması

  1. exec spHTTPRequest
  2. @URI = 'http://.-----------------------',
  3. @methodName = 'Post',
  4. @requestBody =
  5. '{
  6. "OrderID": "1000",
  7. "customergln": "1",
  8. "ProductGtin": "86",
  9. "processid": "E",
  10. "lotnumber": "A",
  11. "expiredate": "2023-06-03",
  12. "ProductionDate": "2021-10-15T00:00:00",
  13. "Quantity": 9899,
  14. "StartDate": "2021-10-13T00:00:00"
  15. }',
  16. @responseText ='' ;

Servisimizi çağırdık ve gelen sonucu sizler ile paylaştım. 

  • @URI                      -> Servis adresiniz
  • @methodName   -> Method tipi
  • @requestBody     -> İstek veri
  • @responseText   -> Servis cevabı
Servis Sonucu
Servis Sonucu
5 1 vote
Article Rating
Abone ol
Bildir
1 Yorum
Beğenilenler
En Yeniler Eskiler
Satır İçi Geri Bildirimler
Tüm yorumlar
Hasan
04/02/2022 00:33

Elinize sağlık güzel bir yazı oomuş

1
0
Düşüncelerinizi paylaşınx
()
x