Birden fazla WSDL Servisi içinde bulunan isim benzerliğinden doğan sorun!

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 2991
Kayıt: 17 Nis 2006 07:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Birden fazla WSDL Servisi içinde bulunan isim benzerliğinden doğan sorun!

Mesaj gönderen sabanakman » 26 Kas 2017 01:57

İyi günler. Bu genelde asıl ve test servisleri içinde yaşanabileceği gibi hiç alakasız başka servislere bağlanırken de aynı isme sahip parametre veya metotlar yüzünden delphi de kurgulanan sistem çökmektedir. Şöyle ki; iki farklı alakasız serviste bulunan metot(lar)un KullaniciBilgileri diye bir parametre aldığını düşünelim. Birisi başka yapıda, diğeri çok başka yapıda. Böyle olunca da WSDL import ile oluşan unit lerde initialization bloğunda bulunan InvRegistry.Register... metotları bu işi ismen yaptığından tip olarak bunlardan birisini kullanmaya imkan vermektedir. Hal böyle olunca da diğer servisi aynı anda kullanma imkanı ortadan kalkmaktadır. Geçici bir çözüm olarak initialization bloklarını bir procedure içine taşıyıp, kullanılması gereken servis için çalıştırmak gerekebiliyor ama diğer servis için her ne kadar bu kaydetme metodu çalışsa da sorun düzelmemektedir. InvRegistry sınıfları da VCL kütüphanesinde gizli nesneler olduğu için yok etmek de pek mümkün olmamaktadır. Biraz InvRegistry.UnRegister metotlarını kurcalasam da (şahsen) düzgün sonuç alamadım. Belki atladığım bir nokta da olabilir gerçi. Hal böyle olunca bir servis kullanıldıktan sonra, diğerini kullanmak için programı kapatıp açtırıyorum şimdilik. Bunun bilindik başka bir çözümü var mıdır acep? Yoksa başka bir WSDL kütüphanesine mi baş vurmak gerekiyor? Kolay gelsin, iyi çalışmalar.
En son sabanakman tarafından 26 Kas 2017 03:47 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .

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

Re: Birden fazla WSDL Servisi içinde bulunan isim benzerliğinden doğan sorun!

Mesaj gönderen sabanakman » 26 Kas 2017 03:42

İlginçtir, soruyu yazmadan önceki uzun uğraşlar sonuç vermemişti ama şu anda yaptığım denememde çalıştırabildim. Soruyu 1 ay kadar sormakta tereddüt ettim ama ne gariptir, forumdan paylaştığım gün çözüme ulaştım sanırım. Haliyle de aynı durumu yaşayan olursa diye bulduğum çözümü paylaşmak şart :D . Belki önceki denemelerimde gözümden bazı şeyler kaçmış olabilir :oops: . Çözüm için yaptığım tam olarak şöyleydi:

1-WSDL Import ile oluşturulan "unit"lerin initialization bloklarında yazan tüm kodları "procedure Register" isimli bir prosedüre oluşturup, buna taşıdım ve initialization bloklarını boşalttım.

2-Yine her WSDL Import ile oluşturulan "unit"lerin içinde aşağıdaki kurguya göre "procedure UnRegister" prosedürleri oluşturdum.
2.A->Her InvRegistry.RegisterInterface(TypeInfo(WS_....), 'http://.....', 'utf-8'); ile kayıt edilen tiplerin hepsine karşılık birer InvRegistry.UnRegisterInterface(TypeInfo(WS_...)); satırı oluşturdum.
2.B->Her RemClassRegistry.RegisterXSInfo(TypeInfo(...),'....'); ile kayda geçilen tiplerin her birini RemClassRegistry.UnRegisterXSInfo(TypeInfo(...)); ile kayıttan çıkardım.
2.C->Her RemClassRegistry.RegisterXSClass(TypeInfo(...),'....'); ile kayda geçilen sınıfların her birini RemClassRegistry.UnRegisterXSClass(TypeInfo(...)); ile kayıttan çıkardım.
2.D->Bir de "unit"lerin içinde tanımlanan bütün class tanımları için InvRegistry.UnRegisterInvokableClass ile sınıfları kayıttan çıkardım.

3-Artık bir servisi çağırmadan önce ismi benzeyen parametreye sahip servise ait UnRegister prosedürün çağırdım ve ardından kullanmak istediğim servise ait Register proseüdürünü çağırmam bu problemi çözdü sanırım. Henüz büyük karmaşıklıkta denemeler yapmadım ama basit bazı denemeler yaparak bu sorun çözülmüş bulunmaktadır. İyi çalışmalar.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .

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

Re: Birden fazla WSDL Servisi içinde bulunan isim benzerliğinden doğan sorun!

Mesaj gönderen sabanakman » 11 Ara 2017 04:29

Sanırım buna rağmen yeterli çözümü elde edemediğim bir durum daha oluştu. Sorun, HTTPRIO bileşenini GET...WS() metodu içindeki as operatörüyle meydana gelen dönüşümden kaynaklanmaktadır sanırım. HTTPRIO üzerinde bazı özellik ve olayları ayarlamam gerektiğinden modül üzerine bileşeni atıp ayarlamıştım ve dfm üzerindeki bu bileşenden çalışmıştım. Sorun da bu tek bileşen üzerinden çalıştığım için hasıl olmuş. Gerekli servis için farklı bir HTTPRIO create edildiğinde ve aynı özellikler ayarlandığında sorun düzeldi. Aynı durum çıkması durumunda bu da bir çözüm olarak burada dursun, iyi çalışmalar :oops: :mrgreen: .
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .

Cevapla