WSDL sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
misem
Üye
Mesajlar: 7
Kayıt: 24 Kas 2017 04:06

WSDL sorunu

Mesaj gönderen misem » 24 Kas 2017 04:16

Merhaba,
aşağıdaki sgk nın e reçete sistemi için oluşturduğu web servisin wsdl urlsini kullanarak sisteme reçete göndermek için kullanmak istiyorum, wsdl adresini delphiye xe10 a import ettiğimde oluşan fonksiyonlardaki hiçbir parametrenin değişken tanımı olmadığından "Undeclared identifier 'ereceteSorgula' " gibi her değişken için hata veriyor.

Sorunu çözemedim ben burada her değişken tanımını kendim mi yapacağım ?

https://saglikt.sgk.gov.tr/medula/eczan ... eriWS?wsdl

ilgili web servis dökümanı
https://medeczane.sgk.gov.tr/doktor/Sag ... isleri.pdf

Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 2978
Kayıt: 17 Nis 2006 07:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: WSDL sorunu

Mesaj gönderen sabanakman » 25 Kas 2017 10:41

İyi günler. SGK servisleri genelde tipler (xsd:schema) için farklı yere yönlendirme yaptığından bu durum oluşmaktadır. Bunu da çözmek için WSDL sayfasını WSDL.xml olarak kayıt edin ve yine bu WSDL sayfası içindeki xsd:schema\xsd:import düğümündeki schemaLocation özelliğinde bulunan adresteki bilgiyi de ayrı bir schema.xml olarak kayıt edin. Daha sonra ilk kayıt edilen WSDL.xml içindeki <xsd:schema></xsd:schema> düğümünü kaldırıp onun yerine de schemaLocation.xml içindeki <xsd:schema></xsd:schema> düğümünü yerleştirip saglikTesisiReceteIslemleriWS.xml olarak kayıt edin. Arık burada tanımları tam olan bir saglikTesisiReceteIslemleriWS.xml dosyasınız olacaktır. Bunu WSDL import ile import edebilirsiniz ama WSDL Adresi ve URL adresinde sıkıntı çıkmaması için son bir kontrol (aşağıdaki gibi değiştirmeniz) gerekebilir.

Kod: Tümünü seç

defWSDL = 'https://saglikt.sgk.gov.tr/medula/eczane/saglikTesisiReceteIslemleriWS?wsdl';
defURL  = 'https://saglikt.sgk.gov.tr/medula/eczane/saglikTesisiReceteIslemleriWS';
Bu gün yayınlanmış olan WSDL parametrelerine göre ekte gönderdiğim saglikTesisiReceteIslemleriWS.xml dosyası oluşmaktadır ve buradan import edilen unit hata vermeden derlenebilmektedir. İyi çalışmalar.
Dosya ekleri
saglikTesisiReceteIslemleriWS.7z
WSDL Import işleminde kullanılacak dosya
(3.33 KiB) 7 kere indirildi
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .

misem
Üye
Mesajlar: 7
Kayıt: 24 Kas 2017 04:06

Re: WSDL sorunu

Mesaj gönderen misem » 27 Kas 2017 08:41

sabanakman yazdı:
25 Kas 2017 10:41
İyi günler. SGK servisleri genelde tipler (xsd:schema) için farklı yere yönlendirme yaptığından bu durum oluşmaktadır. Bunu da çözmek için WSDL sayfasını WSDL.xml olarak kayıt edin ve yine bu WSDL sayfası içindeki xsd:schema\xsd:import düğümündeki schemaLocation özelliğinde bulunan adresteki bilgiyi de ayrı bir schema.xml olarak kayıt edin. Daha sonra ilk kayıt edilen WSDL.xml içindeki <xsd:schema></xsd:schema> düğümünü kaldırıp onun yerine de schemaLocation.xml içindeki <xsd:schema></xsd:schema> düğümünü yerleştirip saglikTesisiReceteIslemleriWS.xml olarak kayıt edin. Arık burada tanımları tam olan bir saglikTesisiReceteIslemleriWS.xml dosyasınız olacaktır. Bunu WSDL import ile import edebilirsiniz ama WSDL Adresi ve URL adresinde sıkıntı çıkmaması için son bir kontrol (aşağıdaki gibi değiştirmeniz) gerekebilir.

Kod: Tümünü seç

defWSDL = 'https://saglikt.sgk.gov.tr/medula/eczane/saglikTesisiReceteIslemleriWS?wsdl';
defURL  = 'https://saglikt.sgk.gov.tr/medula/eczane/saglikTesisiReceteIslemleriWS';
Bu gün yayınlanmış olan WSDL parametrelerine göre ekte gönderdiğim saglikTesisiReceteIslemleriWS.xml dosyası oluşmaktadır ve buradan import edilen unit hata vermeden derlenebilmektedir. İyi çalışmalar.
Cevabınız için teşekkürler bende konuyu açtıktan sonra araştırmaya devam ettim dediğiniz yöntem ile sorunu çözebildim. :bravo:

misem
Üye
Mesajlar: 7
Kayıt: 24 Kas 2017 04:06

Re: WSDL sorunu

Mesaj gönderen misem » 02 Ara 2017 10:02

Sisteme her soap işlemi kullanıcı adı şifre gönderilmesi gerekiyor ancak wsdl delphiye import ettim fakat kullanıcı adı şifre göndereceğim methot yok yanlış bir şey mi yapıyorum?

ertank
Üye
Mesajlar: 965
Kayıt: 11 Eyl 2015 11:45

Re: WSDL sorunu

Mesaj gönderen ertank » 02 Ara 2017 10:41

Merhaba,

SGK sistemini incelemedim. Ancak SOAP kullanıcı adı ve şifreleri her zaman metod kullanarak gönderilmeyebiliyor. Çoğunlukla bağlantı parametrelerine eklenerek kullanılıyor. Kullandığınız Delphi sürümünde THTTPRIO bileşeninin aşağıdaki özelliğini kullanmayı deneyebilirsiniz. Daha önceki sürümlerde bu işlemi geçekleştirme biraz daha farklı yollardan yapılıyordu.

Kod: Tümünü seç

var
  RIO: THTTPRIO;
  WS: WebServisInvokableAdi;
begin
  RIO := THTTPRIO.Create(nil);
  RIO.URL := 'web servis bağlantı kontası';
  RIO.HTTPWebNode.UserName := 'kullaniciadi';
  RIO.HTTPWebNode.Password := 'sifre';
  WS := (RIO as WebServisInvokableAdi);
  ...
Eğer RIO sınıfını kendiniz oluşturarak kullanmıyorsanız (web servis atama prosedürünü kullanıyorsanız) web servis değişkeninizi THTTPRIO türüne type cast etmeniz gerekebilir.

Kod: Tümünü seç

var
  WS: WebServisInvokableAdi;
begin
  WS := GetWebServisInvokableAdi();
  THTTPRIO(WS).HTTPWebNode.UserName := 'kullaniciadi';
  THTTPRIO(WS).HTTPWebNode.Password := 'sifre';
  ...
En son ertank tarafından 02 Ara 2017 04:30 tarihinde düzenlendi, toplamda 1 kere düzenlendi.

misem
Üye
Mesajlar: 7
Kayıt: 24 Kas 2017 04:06

Re: WSDL sorunu

Mesaj gönderen misem » 02 Ara 2017 02:10

ertank yazdı:
02 Ara 2017 10:41
Merhaba,

SGK sistemini incelemedim. Ancak SOAP kullanıcı adı ve şifreleri her zaman metod kullanarak gönderilmeyebiliyor. Çoğunlukla bağlantı parametrelerine eklenerek kullanılıyor. THTTPRIO bileşeninin aşağıdaki özelliğini kullanmayı deneyebilirsiniz.

Kod: Tümünü seç

var
  RIO: THTTPRIO;
  WS: WebServisInvokableAdi;
begin
  RIO := THTTPRIO.Create(nil);
  RIO.URL := 'web servis bağlantı kontası';
  RIO.HTTPWebNode.UserName := 'kullaniciadi';
  RIO.HTTPWebNode.Password := 'sifre';
  WS := (RIO as WebServisInvokableAdi);
  ...
Eğer RIO sınıfını kendiniz oluşturarak kullanmıyorsanız (web servis atama prosedürünü kullanıyorsanız) web servis değişkeninizi THTTPRIO türüne type cast etmeniz gerekebilir.

Kod: Tümünü seç

var
  WS: WebServisInvokableAdi;
begin
  WS := GetWebServisInvokableAdi();
  THTTPRIO(WS).HTTPWebNode.UserName := 'kullaniciadi';
  THTTPRIO(WS).HTTPWebNode.Password := 'sifre';
  ...
Yorumunuz için teşekkür ederim.Otomatik olarak oluşturulan webservis unitinin içerisinde getsagliktesisireceteislemleri() foksyionu httprio nesnesini parametre olarak alıyor. Bu fonsiyon web servis ile bağlantı sağlıyor. Yeni bir tane httprio oluşturup kullanıcı adını ve şifresini atayıp fonsiyona parametre olarak verdim umarım bu sorunu çözecektir.

Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 2978
Kayıt: 17 Nis 2006 07:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: WSDL sorunu

Mesaj gönderen sabanakman » 02 Ara 2017 04:52

C# veya Java gibi Başka dilde yazılmış bir örnek var mı elinizde!
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .

misem
Üye
Mesajlar: 7
Kayıt: 24 Kas 2017 04:06

Re: WSDL sorunu

Mesaj gönderen misem » 05 Ara 2017 10:53

sabanakman yazdı:
02 Ara 2017 04:52
C# veya Java gibi Başka dilde yazılmış bir örnek var mı elinizde!
hangi konuda hocam anlayamadım?

misem
Üye
Mesajlar: 7
Kayıt: 24 Kas 2017 04:06

Re: WSDL sorunu

Mesaj gönderen misem » 06 Ara 2017 10:42

ertank yazdı:
02 Ara 2017 10:41
Merhaba,

SGK sistemini incelemedim. Ancak SOAP kullanıcı adı ve şifreleri her zaman metod kullanarak gönderilmeyebiliyor. Çoğunlukla bağlantı parametrelerine eklenerek kullanılıyor. Kullandığınız Delphi sürümünde THTTPRIO bileşeninin aşağıdaki özelliğini kullanmayı deneyebilirsiniz. Daha önceki sürümlerde bu işlemi geçekleştirme biraz daha farklı yollardan yapılıyordu.

Kod: Tümünü seç

var
  RIO: THTTPRIO;
  WS: WebServisInvokableAdi;
begin
  RIO := THTTPRIO.Create(nil);
  RIO.URL := 'web servis bağlantı kontası';
  RIO.HTTPWebNode.UserName := 'kullaniciadi';
  RIO.HTTPWebNode.Password := 'sifre';
  WS := (RIO as WebServisInvokableAdi);
  ...
Eğer RIO sınıfını kendiniz oluşturarak kullanmıyorsanız (web servis atama prosedürünü kullanıyorsanız) web servis değişkeninizi THTTPRIO türüne type cast etmeniz gerekebilir.

Kod: Tümünü seç

var
  WS: WebServisInvokableAdi;
begin
  WS := GetWebServisInvokableAdi();
  THTTPRIO(WS).HTTPWebNode.UserName := 'kullaniciadi';
  THTTPRIO(WS).HTTPWebNode.Password := 'sifre';
  ...
verdiğiniz örnek ile denediğimde maalesef olmadı. Geriye hata döndü

Kod: Tümünü seç

Alınan mesajda "username" elementi bulunamadı. Mesaj headerinda kullanıcı bilgilerini içeren security elementi olması gerekmektedir. 
Soap header nasıl eklenip gönderilir diye araştırıyorum https://stackoverflow.com/questions/137 ... -in-delphi burdaki +200 olan çözümü denedim ancak hala username etiketi yok diyor anlamadım ekliyorum dediği şekilde.

misem
Üye
Mesajlar: 7
Kayıt: 24 Kas 2017 04:06

Re: WSDL sorunu

Mesaj gönderen misem » 06 Ara 2017 01:10

misem yazdı:
06 Ara 2017 10:42
ertank yazdı:
02 Ara 2017 10:41
Merhaba,

SGK sistemini incelemedim. Ancak SOAP kullanıcı adı ve şifreleri her zaman metod kullanarak gönderilmeyebiliyor. Çoğunlukla bağlantı parametrelerine eklenerek kullanılıyor. Kullandığınız Delphi sürümünde THTTPRIO bileşeninin aşağıdaki özelliğini kullanmayı deneyebilirsiniz. Daha önceki sürümlerde bu işlemi geçekleştirme biraz daha farklı yollardan yapılıyordu.

Kod: Tümünü seç

var
  RIO: THTTPRIO;
  WS: WebServisInvokableAdi;
begin
  RIO := THTTPRIO.Create(nil);
  RIO.URL := 'web servis bağlantı kontası';
  RIO.HTTPWebNode.UserName := 'kullaniciadi';
  RIO.HTTPWebNode.Password := 'sifre';
  WS := (RIO as WebServisInvokableAdi);
  ...
Eğer RIO sınıfını kendiniz oluşturarak kullanmıyorsanız (web servis atama prosedürünü kullanıyorsanız) web servis değişkeninizi THTTPRIO türüne type cast etmeniz gerekebilir.

Kod: Tümünü seç

var
  WS: WebServisInvokableAdi;
begin
  WS := GetWebServisInvokableAdi();
  THTTPRIO(WS).HTTPWebNode.UserName := 'kullaniciadi';
  THTTPRIO(WS).HTTPWebNode.Password := 'sifre';
  ...
verdiğiniz örnek ile denediğimde maalesef olmadı. Geriye hata döndü

Kod: Tümünü seç

Alınan mesajda "username" elementi bulunamadı. Mesaj headerinda kullanıcı bilgilerini içeren security elementi olması gerekmektedir. 
Soap header nasıl eklenip gönderilir diye araştırıyorum https://stackoverflow.com/questions/137 ... -in-delphi burdaki +200 olan çözümü denedim ancak hala username etiketi yok diyor anlamadım ekliyorum dediği şekilde.
web servis soap security ekleme için https://stackoverflow.com/questions/137 ... -in-delphi adresindeki ki WSSE_SGK.pas dosyasını kullanarak hallettim ancak şuan tesis kodu hatası alıyorum

ertank
Üye
Mesajlar: 965
Kayıt: 11 Eyl 2015 11:45

Re: WSDL sorunu

Mesaj gönderen ertank » 06 Ara 2017 01:37

Merhaba,

Normalde yapmanız gereken SGK dökümanlarında gördüğüm kadarıyla "HTTP Basic Authentication" Bunun yapılış şekli de yukarıdaki ilk cevabımdaki ilk örnekteki gibidir. Ancak, SGK gördüğüm kadarıyla servis ile ilgili sürekli değişiklikler yapıyor. Nitekim ben bugün şu an itibariyle https://saglikt.sgk.gov.tr için ERR_NAME_NOT_RESOLVED hatası alıyorum.

Eğer kendiniz manuel yapmak istiyorsanız aşağıdaki şekilde yapmanız mümkün.
https://stackoverflow.com/questions/343 ... ttp-header
Ancak, bu yöntem benim ilk önerdiğim yöntemin Delphi 7 gibi eski sürümlerdeki uzun şekilde yapılışıdır. Gidecek olan XML aynı olacaktır.

Kullandığınız WSDL dosyasını ve Servis çağıran kodunuzu kullanıcı adı ve şifreyi gizleyerek paylaşabilir misiniz?

Cevapla