SOAP Servise SQL üzerinden sorgu yapmak

sarigozoglu

Altın Üye
Katılım
26 Eylül 2014
Mesajlar
85
Excel Vers. ve Dili
Office 365 TR-32
Altın Üyelik Bitiş Tarihi
06-01-2025
Sevgili arkadaşlar;
"WSDL URL : http://........" linki ile kullanıcı adı ve şifre girerek kullanılabilecek bir servisimiz mevcut.
SaopUI ile servise bağlanıp boş sorgu ile verileri gördüm ve servisi test ettim.

Şimdi BU SOAP Servive SQL MS ile bağlanarak veri başlıklarında sorgu yaparak buradaki örnek "TCNO, AD, SOYAD" gibi alanlara ulaşmak istiyorum.

Bu konuda desteğe ihtiyacım var.
 
Katılım
11 Temmuz 2024
Mesajlar
102
Excel Vers. ve Dili
Excel 2021 Türkçe
Sorunun cevapsız kalmaması adına yazıyorum;
  1. İlk olarak, SQL Server'da web servisini kullanabilmek için sp_OACreate ve sp_OAMethod gibi Ole Automation Stored Procedure'lerini etkinleştirmeniz gerekiyor. Bunun için:

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


Ardından, aşağıdaki gibi bir stored procedure oluşturabilirsiniz:

CREATE PROCEDURE GetDataFromWebService
@TCNO NVARCHAR(11),
@Username NVARCHAR(50),
@Password NVARCHAR(50)
AS
BEGIN
DECLARE @obj INT
DECLARE @src VARCHAR(8000)
DECLARE @desc VARCHAR(8000)
DECLARE @response VARCHAR(8000)

-- Web servis çağrısı için XML oluştur
SET @src = '<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetPersonInfo xmlns="http://tempuri.org/">
<TCNO>' + @TCNO + '</TCNO>
</GetPersonInfo>
</soap:Body>
</soap:Envelope>'

-- MSXML2.ServerXMLHTTP nesnesini oluştur
EXEC sp_OACreate 'MSXML2.ServerXMLHTTP', @obj OUT

-- Web servise bağlan
EXEC sp_OAMethod @obj, 'open', NULL, 'POST', 'http://your-webservice-url-here', 'false'

-- Kimlik doğrulama bilgilerini ayarla
EXEC sp_OAMethod @obj, 'setRequestHeader', NULL, 'Authorization', 'Basic ' + CAST(CAST('' AS XML).value('xs:base64Binary(sql:column("auth"))', 'VARCHAR(MAX)') AS VARCHAR(MAX))
FROM (SELECT @Username + ':' + @Password AS auth) AS t

-- İsteği gönder
EXEC sp_OAMethod @obj, 'send', NULL, @src

-- Yanıtı al
EXEC sp_OAMethod @obj, 'responseText', @response OUTPUT

-- Yanıtı parse et ve sonuçları döndür
SELECT
@response AS RawResponse,
CAST(@response AS XML).value('(//GetPersonInfoResult/AD)[1]', 'NVARCHAR(50)') AS AD,
CAST(@response AS XML).value('(//GetPersonInfoResult/SOYAD)[1]', 'NVARCHAR(50)') AS SOYAD,
CAST(@response AS XML).value('(//GetPersonInfoResult/TCNO)[1]', 'NVARCHAR(11)') AS TCNO

-- Nesneyi temizle
EXEC sp_OADestroy @obj
END



  1. Bu stored procedure'ü şu şekilde çağırabilirsiniz:
EXEC GetDataFromWebService @TCNO = '12345678901', [USER=2477]@username[/USER] = 'your_username', [USER=104428]@password[/USER] = 'your_password'

Not: Bu yöntem, SQL Server'da doğrudan web servisi çağırmak için kullanılır, ancak güvenlik ve performans açısından ideal bir çözüm değildir. Daha güvenli ve verimli bir çözüm için, web servisini bir .NET uygulaması üzerinden çağırıp, sonuçları SQL Server'a aktarmak daha iyi bir yaklaşım olabilir.
 
Üst