Oracle PL/SQL ile WCF servis çağrılması.

325 views
Skip to first unread message

Bahadir Erdem

unread,
Nov 19, 2012, 8:53:41 AM11/19/12
to altdotne...@googlegroups.com
Müşterilerimizden birinin beraber çalıştığı başka bir yazılım firmasından bir yazılımcı WCF servisimizi 
Oracle üzerinden çağırmayı deniyor.

Klasik web servis (asmx) çağırdığında bir sıkıntı yokken WCF servisinde 500 internal server error alıyor. Muhtemelen gelen soap mesaj içeriği/formatı beklenen gibi olmadığından bu hata geliyor.

Şimdi konu basit iki anahtar kelime var WCF ve Oracle. Hatta WCF in utl_http ile değil utl_dbws ile çağrılabileceğini de okuduktan sonra tamam diyor insan WCF ve utl_dbws anahtar kelimelerimiz.
Bunların başına kıçına bir şeyler koyup aratırız çalıştığı onaylanan bir örnek buluruz sonrada cevap atarız diğer yazılımcı arkadaşa. Al kardeşim utl_http değil utl_dbws paketini kullanacaksın bu da örnek.

Yok böyle bir şey. Yok yahu bulamadım WCF servisinin Oracle üzerinden çalıştığı, tamam bu çalışıyor denen bir örnek.

Oracle ile WCF servisi çağrılmasına dair 5-6 forum postu vs. buldum ama hepsi hata alıp soru sormuşlar. Herkes te şöyle yap böyle yap, şöyle olur demiş ama bir insan evladı çıkıpta iki satır örnek yazmamış.

Bu duruma olan şaşkınlığımdan olsa gerek uzun yazdım biraz. 

Özet geçeyim; böyle bir örnek var mı bildiğiniz. Ya da biri çıkıp desin ki "yok kardeşim oracle dan wcf servis çağrılmıyor". Bunu diyeni de bulamadım :).

Teşekkürler,
Bahadır.

Berke Sokhan

unread,
Nov 19, 2012, 9:06:53 AM11/19/12
to altdotne...@googlegroups.com
Java veya .NET dışındaki bir platformdan çağırmayla ilgili sorunlara  baksan daha mı doğru olur acaba diye düşünüyorum.

Ayrıca binding olarak ne kullanıyorsunuz? basichttpbinding dışındakilerde sorun olabilir...



19 Kasım 2012 15:53 tarihinde Bahadir Erdem <ber...@gmail.com> yazdı:

--
You received this message because you are subscribed to the Google Groups "altdotnetturkiye" group.
To post to this group, send email to altdotne...@googlegroups.com.
To unsubscribe from this group, send email to altdotnetturki...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/altdotnetturkiye?hl=en.



--
Berke SOKHAN.

http://twitter.com/berkesokhan
http://blog.berkesokhan.com
http://www.birliktegelistir.com/editors.aspx

Bahadir Erdem

unread,
Nov 19, 2012, 9:48:02 AM11/19/12
to altdotne...@googlegroups.com
Hocam o kadar sıkıntı yaşadım ki daha önce basichttp dışındaki binding lerde  basichttp olmasa baştan aramaktan vazgeçer asmx olarak kopya bir servis koyardım açıkçası :)

Java / .Net dışındaki platformalardan çağrılmasına bakmak mantıklı belki ama Oracle konusunda hemen hemen hiç tecrübem olmadığını düşünürsek meseleye daha temelden girecek kadar zamanım olmayabilir.

Esasında burda diğer yazılımcı arkadaşın bizim tarafımıza ".asmx ini yapsanız ?"  diye sormak yerine Oracle' dan destek alması daha yerinde olurdu diye düşünüyorum.



2012/11/19 Berke Sokhan <berke...@gmail.com>

Oğuzhan YILMAZ

unread,
Nov 19, 2012, 10:07:52 AM11/19/12
to altdotne...@googlegroups.com
Server tarafında 500 Internal Server Error'un StackTrace'inden bir şeyler çıkabilir. Ek olarak http isteğinin server'a nasıl geldiğini capture etmek olayın yarısını çözer gibi (Fiddler kullanılabilir)

Oğuzhan



19 Kasım 2012 16:48 tarihinde Bahadir Erdem <ber...@gmail.com> yazdı:

Sidar Ok

unread,
Nov 19, 2012, 10:08:13 AM11/19/12
to altdotne...@googlegroups.com
Bence de sorunu Oracle la cozmeleri gerek, senlik bir durum yok. Diger client lar cali$iyorsa. (Tabii bir de sozle$menizde yoksa)


2012/11/19 Bahadir Erdem <ber...@gmail.com>

Bahadir Erdem

unread,
Nov 19, 2012, 10:16:00 AM11/19/12
to altdotne...@googlegroups.com
Bende Oracle ortamı kurulu olsa fiddler, wireshark vs. kullanıp bir şekilde doğru XML formatını bulup gönderebilirdim belki ama dediğim gibi yakınımda oracle kurulu bir ortam da yok, oracle hakkında fazla tecrübem de.

Sözleşme mevzusunda bilgim yok ama bir şekilde aynı projenin asmx ini yazmak gibi aptalca bir durumdan kurtulmaya çalışıyorum, böyle yapmam belki daha fazla zaman alacak olsa bile :)

Stackoverflow a yazdım yarına kadar bekleyeceğim. En azından sorunun görünürlülüğü açısından bu posta +1 alırsam sevinirim. Fazla repte gözüm yok, maksat soru üstte görünsün :).

Teşekkür ettim,
Bahadır.


2012/11/19 Sidar Ok <sid...@gmail.com>

Reşad Askerov

unread,
Nov 19, 2012, 10:38:07 AM11/19/12
to altdotne...@googlegroups.com
service erişirken endpoint ismi urlde yoksa onada şarlıyor olabilir.

ilaveten datacontract ve message contract kısımlarını doğrulamakta fayda var nede olsa .net platformu değil. 

kolay gelsin.

2012/11/19 Bahadir Erdem <ber...@gmail.com>

Berke Sokhan

unread,
Nov 19, 2012, 11:04:47 AM11/19/12
to altdotne...@googlegroups.com
Diagnostik olarak adama yardımcı olmak için (neyi yanlış yaptığını bilmesi için) web app veya windows app'inin configine aşağıdaki bloğu ekleyip, oluşan dosyayı (C:\WCFServicesLog.svclog) Visual Studio kurulu bir ortamda hataları inceleyebilirsin. Ttabi sana doğru geliyor sen de doğru cevap veriyor görürsen, adama "bende herşey ok ama dönüşümü sen karşılayamıyorsun" dersin, ona odaklanır...

 <system.diagnostics>
    <sources>
      <source name="System.ServiceModel" switchValue="Information,ActivityTracing" propagateActivity="true">
        <listeners>
          <add name="xml" />
        </listeners>
      </source>
      <source name="System.ServiceModel.MessageLogging">
        <listeners>
          <add name="xml" />
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add initializeData="C:\WCFServicesLog.svclog" type="System.Diagnostics.XmlWriterTraceListener" name="xml" />
    </sharedListeners>
    <trace autoflush="true" />
  </system.diagnostics>

19 Kasım 2012 17:38 tarihinde Reşad Askerov <r.ask...@gmail.com> yazdı:

Bahadir Erdem

unread,
Nov 19, 2012, 1:55:42 PM11/19/12
to altdotne...@googlegroups.com
Teşekkür ettim, logu aktive ettim sonradan ama elemana dönemedim elimde yeterli veri olmadığı için.

Artık yarın Reşad' ın belittiği noktayıda dikkate alarak ve utl_dbws package ını kullanmasını isteyerek tekrar denettireceğim. Wiresharktan giden soap mesaj formatlarını aldım, namespaceler yok benim aldığımda ama diğer yazılımcı arkadaşın gönderdiği XML de namespaceler mevcut. sorun olacağını düşünmüyorum ama yine de bunu da dikkate alacağım.

Hayır bir de .Net 4.0 asmx i de desteklemiyor. asmx yoluna gidecek olursak tamamiyle ayrı bir uygulama yazmak gerekecek. Sonuç kan ve gözyaşı olacak.

Tekrar teşekkürler cevaplar için.


2012/11/19 Berke Sokhan <berke...@gmail.com>

H.Hüseyin GENÇER

unread,
Nov 19, 2012, 2:57:02 PM11/19/12
to altdotne...@googlegroups.com
> Hayır bir de .Net 4.0 asmx i de desteklemiyor. asmx yoluna gidecek olursak
> tamamiyle ayrı bir uygulama yazmak gerekecek. Sonuç kan ve gözyaşı olacak.

Visual Studio 2010 da ASP.NET Web Application Projesi ne Add New Item
aracılığıyla WebService(asmx) eklenebiliyor diye biliyorum.

--
MCTS, H.Hüseyin GENÇER

Bahadir Erdem

unread,
Nov 19, 2012, 4:56:02 PM11/19/12
to altdotne...@googlegroups.com
Bir yaşıma daha girdim...

Nasıl edindiysem bu izlenimi, .Net 4.0 a web servis eklenmiyor diye biliyordum. Şimdi araştırdım şu linkte de aynı şeyler söylenmiş.

Bana öyle geliyorki pek saygı değer ilgili microsoft ekibi WCF daha kolay kabul görsün diye .Net4.0 ve 4.5 a asmx web servis proje template i eklememişler. Gizlemişler resmen. İşi kitabına uygun yapmaya kalktığınızda eklenemeyeceği izlenimi ediniyorsunuz. Bir de nette rastgele biri .Net4.0 te legacy web servis oluşturamıyorsunuz yazmışsa... oof of.

Ben de durumu aynen onların görmemizi istediği gibi gören sazanlardan biri olmuşum. Teşekkür ettim. En azından uygulamanın asmx kopya sını yapmamız gerekirse yapılacak iş ne kadar iğrenç te olsa çok fazla zaman almayacak.


2012/11/19 H.Hüseyin GENÇER <hge...@gmail.com>

Sidar Ok

unread,
Nov 19, 2012, 5:04:41 PM11/19/12
to altdotne...@googlegroups.com
Web servis olu$turamamak zaten ba$li ba$ina sacma degil mi, asmx olsun, veya ba$ka bir$ey, sonucta WEB SERVIS. Bir standardi var dahil oldugu.


2012/11/19 Bahadir Erdem <ber...@gmail.com>

Tarik Kranda

unread,
Nov 22, 2012, 2:17:08 PM11/22/12
to altdotne...@googlegroups.com
Hocam Java tarafından bile çağırırken ben birçok garip ttribute düzenlemelerine gitmek zorunda kalıyorum. Ayrıca aynı durum asmx lerin çağırılmasında da karşımıza çıkıyor. Bizim şirket telco şirketi olduğundan ve çok fazla 3rd party ile çalıştığından dışarısı .NET oluyor, bizimkiler Java platformu. Entegrasyon sağlanamayınca benim masada alıyorlar soluğu her gelenin derdini başka ayarları değiştirerek ve araştıra araştıra çözmekten bıktım usandım.

Senin konuda da Berke'nin yaptığı gibi kesinilkle trace almanı tavsiye ederim WCF de bir çok hatayı Trace alarak çözdüğümü söyleyebilirim. Trace çıktısını gönderirsen biz de bakabiliriz. Bunun haricinde müşterine karışamıyorsun tabi de, bu insanların veritabanından servis çağırma eğilimi nedir abi? Yani ben bunu anlamıyorum Microsoft'u da yadırgıyorum veritabanına servis falan gömüyorsun. Hadi custom aggregate .net functionları yazıp gömmüşlüğüm var ama o bile içime sinmemişti. Data is just data. 

asmx yazmak zorunda kalırsan ki yazamak için diren bence ama logici kopyalama en azından senin asmx tarafından arkadaki WCF servisini sen çağır, mülteriye pas et. Tabi eğer çok fazla time constraint yoksa. İki defa editlemek zorunda kalmasın kodlarını deklerasyonların değişmediği sürece, kapsüllemiş olursun senin WCF servisini. BU arada Oracle a da problem açmalarını sağla derim :)


20 Kasım 2012 00:04 tarihinde Sidar Ok <sid...@gmail.com> yazdı:
mx olsun, veya ba$ka bir$ey, sonuct

Sidar Ok

unread,
Nov 22, 2012, 2:58:22 PM11/22/12
to altdotne...@googlegroups.com
Oracle da data is just data degil, adamlar genelde mantaliteyi herseyi DB de yapmak uzerine kuruyorlar. Database logic in kaynagi oluyor, application da dummy class lar oluyor sadece.

WS konusunda ise standardlara uyulmama sorunu var, haklisin.


2012/11/22 Tarik Kranda <tarik...@gmail.com>

--
You received this message because you are subscribed to the Google Groups "altdotnetturkiye" group.
To post to this group, send email to altdotne...@googlegroups.com.
To unsubscribe from this group, send email to altdotnetturki...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/altdotnetturkiye?hl=en.

Berke Sokhan

unread,
Nov 22, 2012, 3:43:45 PM11/22/12
to altdotne...@googlegroups.com
Şimdi konu servislerin genel entegrasyonuna kayıyorsa bir kaç cümle daha ekleyeyim...

Bizim de geliştirdiğimiz uygulamaların servisleri çiçekci böcekçiden, telco şirketlerine kadar bir çok şirket tarafından istek yapılarak çağrılıyor (örneğin bankalara Sanal POS sunucu yapıyoruz). Bu tür servislerde POX ana tercihimiz, bazılarında name&value pair bile alıyoruz (HTTP POST) ve bu çok mantıklı... 

Kolay kullanılabilen bir servis API'si tasarlayacaksanız, platform bağımlılığı istenmiyorsa ve büyük veriler taşımayacaksanız (sıkıştırılmış dosyaları servis ile göndermek gibi) WS-* veya SOAP yerine JSON veya POX, hiç olmadı name&value pair isteyen bir tasarım üzerinde durun. 

Komşunun kızı dahil herkes kolayca entegre olacaktır :))

(Bunlarla uğraşmayayım diyorsanız HTTP'ye yakın bir web servis tasarımı için ASP.NET MVC Web API'yi inceleyin mesala)

22 Kasım 2012 21:58 tarihinde Sidar Ok <sid...@gmail.com> yazdı:



--

Tarik Kranda

unread,
Nov 22, 2012, 3:50:38 PM11/22/12
to altdotne...@googlegroups.com
Bizde mesela legacy Perl scriptleri var Unix üzerinde schedule edilmiş durumdalar ve maintenance işleri de ellerimziden öpüyor:) Bunların entegrasyonu için biz de HTTP POST kullanıyoruz. Atsan atılmaz, satsan satılmaz zaten abiler yazmış :)


22 Kasım 2012 22:43 tarihinde Berke Sokhan <berke...@gmail.com> yazdı:

Berke Sokhan

unread,
Nov 22, 2012, 4:28:24 PM11/22/12
to altdotne...@googlegroups.com
Çeşit arttıkça "Back to Basics" abi... :))

22 Kasım 2012 22:50 tarihinde Tarik Kranda <tarik...@gmail.com> yazdı:

Sidar Ok

unread,
Nov 22, 2012, 4:31:33 PM11/22/12
to altdotne...@googlegroups.com
REST i mention etmedin ve Sidar uzuldu :(((

:)


2012/11/22 Berke Sokhan <berke...@gmail.com>

Berke Sokhan

unread,
Nov 22, 2012, 4:34:47 PM11/22/12
to altdotne...@googlegroups.com
Eheh özellikle etmedim, çiçekçi böcekci REST yapamıyor... 

Sadece POST ile REST olabilir mi? ;)

Onu bırak koca koca şirketlerdeki aamların da yapabileceğiniden şüpheliyim :))

22 Kasım 2012 23:31 tarihinde Sidar Ok <sid...@gmail.com> yazdı:

Reşad Askerov

unread,
Nov 23, 2012, 4:49:00 AM11/23/12
to altdotne...@googlegroups.com
bir kaç şey daha eklemek isterim :

genellikle service birden çok endpoint içerirse ve servisin sonuna endpoint yazmadığın durumda 500 hatası alınır.
yani request daha servise gelmemiş olur.
Örnek olarak : Test.svc servisim var ve buna birden fazla end point tanımlamışsam yani enduser ve client gibi,
code dan erişirken buna Test.svc/enduser veya Test.svc/client gibi erişmek gerekir.
 
birde dikkat edilmesi gereken farklı development ortamlarından svc kullanımı varsa datacontract yerine message contract kullanılması tavsiye edilyor.



2012/11/22 Berke Sokhan <berke...@gmail.com>

Bahadir Erdem

unread,
Jan 3, 2013, 6:49:52 AM1/3/13
to altdotne...@googlegroups.com
Selamlar,

Yahu ben bu meselenin sonunu yazmayı unutmuşum. Belki başkasının başına da gelir diye yazayım...

Diğer firmadaki developer arkadaşı yönlendirmelerim ile bir şeyler denedik ettik ve olumlu sonuç alamadık.
Sonunda Oracle ile iletişime geçtiler ve elemana Oracledan normal şartlarda WCF servis çağırılamadığını, bunun ancak Oracle WebLogic ile mümkün olduğunu söylemişler.

Neyse business kodları ayrı yerde olduğundan WCF projesinin altına bir de asmx versiyonunu eklemek çok külfetli olmadı. Sadece WCF tarafında bir yerde Dictionary kullanmıştım onla ilgili asmx de serileştirme mevzusu yüzünden sıkıntı çıktı. Workaroundlar vardı ama bunun yerine Dictionary yi başka bir sınıf ile değiştirmek daha uygun geldi bana (ilgili yerde Dictionary kullanmayı gerektiren bir durum sözkonusu değildi blabla).

Öyleyken böyle.

Bahadır Erdem.

2012/11/23 Reşad Askerov <r.ask...@gmail.com>
Reply all
Reply to author
Forward
0 new messages