Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
[Çözüldü] - WSDL importer / Unable to load WSDL File/Location Hatası
#21
(20-05-2024, Saat: 20:09)mrmarman Adlı Kullanıcıdan Alıntı: Eğer VakifKatilim size çözüm sunmazsa size çözüm önerim şöyle olacak.

* Kendi projeniz için bir klasör belirleyin
* WSDL'yi daima kendiniz download edin.
* Sonra da HTTPRIO'ya file olarak kullanacağı şekilde parametresine bu indirdiğiniz WSDL' XML dosyasını verin.

nasıl mı sizin PAS içindeki fonksiyon aşağıdaki şekilde.

İlk parametre TRUE zaten 
İkinci parametre 'Addr' için download ettiğiniz XML dosya yolunu verin. Addr boş olmadığı için def olan const içerik devre dışı kalacaktır.  

Böylece Download edilemediği için taca çıkan topu yeniden oyuna sokmuş olacaksınız.


function GetICustomerTransactionService(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): ICustomerTransactionService;
const
  defWSDL = '.\CustomerTransactionService.xml';
  defURL  = 'https://boa.vakifkatilim.com.tr/BOA.Integration.WCFService/BOA.Integration.CustomerTransaction/CustomerTransactionService.svc/Basic';
  defSvc  = 'CustomerTransactionService';
  defPrt  = 'BasicHttpBinding_ICustomerTransactionService';
var
  RIO: THTTPRIO;
begin
  Result := nil;
  if (Addr = '') then
  begin
    if UseWSDL then
      Addr := defWSDL
    else
      Addr := defURL;
  end;
  if HTTPRIO = nil then
    RIO := THTTPRIO.Create(nil)
  else
    RIO := HTTPRIO;
  try
    Result := (RIO as ICustomerTransactionService);
    if UseWSDL then
    begin
      RIO.WSDLLocation := Addr;
      RIO.Service := defSvc;
      RIO.Port := defPrt;
    end else
      RIO.URL := Addr;
  finally
    if (Result = nil) and (HTTPRIO = nil) then
      RIO.Free;
  end;
end;



@mrmarman Muharrem hocam dediğiniz şekilde sorunu şimdilik aştım gibi görünüyor tabi şimdi başak bir problem var ama en azından o kısmı geçtim.

aşağıdaki gibi yaptım ve HTTTPRIO bileşeni location olarak wsdl adresini değil aynı yolu gösterdim. bunlarla birlikte yapmamı önerdiğiniz bir adım varmıydı sanırım tüm adımlar bu şekildeydi.

function GetICustomerTransactionService(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): ICustomerTransactionService;
const
 defWSDL = 'C:\yeniservisler\vakif_bot\CustomerTransactionService.xml';
 defURL  = 'https://boa.vakifkatilim.com.tr/BOA.Integration.WCFService/BOA.Integration.CustomerTransaction/CustomerTransactionService.svc/Basic';
 defSvc  = 'CustomerTransactionService';
 defPrt  = 'BasicHttpBinding_ICustomerTransactionService';
var
 RIO: THTTPRIO;
begin
 Result := nil;
 if (Addr = '') then
 begin
   if UseWSDL then
     Addr := defWSDL
   else
     Addr := defURL;
 end;
 if HTTPRIO = nil then
   RIO := THTTPRIO.Create(nil)
 else
   RIO := HTTPRIO;
 try
   Result := (RIO as ICustomerTransactionService);
   if UseWSDL then
   begin
     RIO.WSDLLocation := Addr;
     RIO.Service := defSvc;
     RIO.Port := defPrt;
   end else
     RIO.URL := Addr;
 finally
   if (Result = nil) and (HTTPRIO = nil) then
     RIO.Free;
 end;
end;
Cevapla
#22
Memnun oldum
Statik olarak const değişkenini siz mi değiştirdiniz yoksa oradan pas oluştuğu için kendiliğinden mi yazdı?

Önerim eğer siz elle kod içinden değiştirmişseniz, bunun  yerine dosya yolunu  Addr parametresine kendi projenizden çağrı esnasında göndermeniz. Asıl sağlıklı yöntem bu. Çünkü dosya gerektiğinde yeniden (versiyon güncellemesi) xml pas dönüşümü yaptığınızda yeniden  bu const değişikliğiniz silinecek. Unutulmasın diye.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#23
(21-05-2024, Saat: 07:24)mrmarman Adlı Kullanıcıdan Alıntı: Memnun oldum
Statik olarak const değişkenini siz mi değiştirdiniz yoksa oradan pas oluştuğu için kendiliğinden mi yazdı?

Önerim eğer siz elle kod içinden değiştirmişseniz, bunun  yerine dosya yolunu  Addr parametresine kendi projenizden çağrı esnasında göndermeniz. Asıl sağlıklı yöntem bu. Çünkü dosya gerektiğinde yeniden (versiyon güncellemesi) xml pas dönüşümü yaptığınızda yeniden  bu const değişikliğiniz silinecek. Unutulmasın diye.

Yok hayır hocam ben yapmadım xml import edince kendisi yazdı orayı ben sadece yol bilgisini güncelledim
Cevapla
#24
(21-05-2024, Saat: 07:24)mrmarman Adlı Kullanıcıdan Alıntı: Memnun oldum
Statik olarak const değişkenini siz mi değiştirdiniz yoksa oradan pas oluştuğu için kendiliğinden mi yazdı?

Önerim eğer siz elle kod içinden değiştirmişseniz, bunun  yerine dosya yolunu  Addr parametresine kendi projenizden çağrı esnasında göndermeniz. Asıl sağlıklı yöntem bu. Çünkü dosya gerektiğinde yeniden (versiyon güncellemesi) xml pas dönüşümü yaptığınızda yeniden  bu const değişikliğiniz silinecek. Unutulmasın diye.

Merhaba;
Vakıf katılımla ilgili aynı problemleri ben de yaşadım. Ve sizin önerdiğiniz çözüm ile servisten yanıt alabildim. 

Şimdi ise bu xml yolunu dinamik olarak nasıl yönetebilirim onu düşünüyorum.
xml'i proje içerisine sabit ekleyip ordan xml'i dinamik yüklemek mümkün olur mu? Yoksa exe nin klasörü içinde fln xml'in görünür halde olması ve ordan yol olarka referans etmek istemiyorum.

Yani benim istediğim .pas dosyası gibi xml'i projeye ekleyelim. Ve gerektikçe oradan yükleyelim bunu nasıl yapabiliriz.

Çözüm önerileriniz için teşekkür.
Cevapla
#25
Memnun oldum.

Yine önceki cevabım gibi metodik cevap arayalım.

XML yolu hali hazırda import edilerek generate edilen  pas dosyada CONST kısmında statik. Dolayısıyla bu URL'nin sizin projenizde statik veya pas unit içinde statik olmuş olması arasında fark göremiyorum.

İndirilmiş/indirilecek XML sizin kontrolünüzde olmalı ki 
buradan yola çıkarak adresi parametre olarak el yordamı ile import edilmiş pas içerisine vermeniz gerekli çözümü sağlayacaktır. 

Bu işlem sadece size şunu sağlayacaktır. Unit tarafından download işlemine gerek duyulmayacağı için, download edilememe nedenli başlık konusu hatayı bertaraf etmiş olmaktır.

Zaman içerisinde mevzuat değişimi vb durumlarda xml güncellense dahi zaten servisteki bu güncel yeni fonksiyonlara ulaşmak için yeni baştan pas import işlemi gerekecek.

Basit çözüm proje açıldığında bir defalık indirme yapıp onu temp klasöründen göstermek.

İkincil çözüm indirmek yerine , xml dosyayı Resource olarak proje exesinde tutup bunu temp klasöre açıp kullandırmak
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#26
(01-06-2024, Saat: 11:32)mrmarman Adlı Kullanıcıdan Alıntı: Memnun oldum.

Yine önceki cevabım gibi metodik cevap arayalım.

XML yolu hali hazırda import edilerek generate edilen  pas dosyada CONST kısmında statik. Dolayısıyla bu URL'nin sizin projenizde statik veya pas unit içinde statik olmuş olması arasında fark göremiyorum.

İndirilmiş/indirilecek XML sizin kontrolünüzde olmalı ki 
buradan yola çıkarak adresi parametre olarak el yordamı ile import edilmiş pas içerisine vermeniz gerekli çözümü sağlayacaktır. 

Bu işlem sadece size şunu sağlayacaktır. Unit tarafından download işlemine gerek duyulmayacağı için, download edilememe nedenli başlık konusu hatayı bertaraf etmiş olmaktır.

Zaman içerisinde mevzuat değişimi vb durumlarda xml güncellense dahi zaten servisteki bu güncel yeni fonksiyonlara ulaşmak için yeni baştan pas import işlemi gerekecek.

Basit çözüm proje açıldığında bir defalık indirme yapıp onu temp klasöründen göstermek.

İkincil çözüm indirmek yerine , xml dosyayı Resource olarak proje exesinde tutup bunu temp klasöre açıp kullandırmak

Verdiğiniz bilgilerden dolayı teşekkürler.
Wsdl dosyasını RCDATA olarak yükledikten sonra temp klasörüne kaydedip Rio.WsdlLocation 'a bu yolu verdim.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  paslibvlcplayerin gec acilmasi sorunu-COZULDU sadikacar60 7 318 08-10-2024, Saat: 09:25
Son Yorum: mrmarman
  [Çözüldü] HTTP üzerinden RTSP ile IP kamera stream işlemek Abdullah ILGAZ 4 6.057 08-10-2024, Saat: 09:20
Son Yorum: sadikacar60
  ip kameradan gelen resimde jpeg error #53 hatasi sadikacar60 5 263 01-10-2024, Saat: 08:08
Son Yorum: mrmarman
Question delphi ile kernel mode file hooking-yardım eroniko 7 469 24-08-2024, Saat: 00:34
Son Yorum: eroniko
  Kamera Açma Hatası (java...) serdar 3 1.299 14-07-2024, Saat: 19:50
Son Yorum: lazanya



Konuyu Okuyanlar: 1 Ziyaretçi