apache-axis-servisinin-_net-core-da-istifadesi

Apache Axis servisinin .NET CORE-da istifadəsi

Əziz brain2brain saytımızın oxucuları. Bu məqalədən etibarən özəl bir rublika ilə qarşınızda olacağıq. Bir developer kimi gündəlik development vaxtı rastlaşdığım maraqlı faktları sizinlə bölüşəcəm. Bu məqaləyə özlüyündə bir proqramçının gündəliyi kimi də baxa bilərsiniz. Məqsəd real iş şəraiti ilə sizləri tanış etmək, real praktikada nələrə əhəmiyyət verildiyi, nə tipli problemlərlə rastlaşıldığını və bu problemlərin biz tərəfdən həll üsullarını görmüş olacaqsınız.

PS: Bu məqalələr silsiləsində şirkətin qaydaları nəzərə alınaraq bütün real məlumatlar test məlumatlarla əvəzlənib.

               İşlədiyim şirkətlərdən birində ilk iş günlərində raslaşdığım çox maraqlı məqamlardan biri Apache Axis 1.4 serveri ilə .NET Core-u əlaqələndirmək olmuşdu.

               Apache Axis(Apache Extensible İnteraction system) özlüyündə open source bir web servis framework-dür. SOAP serverin Java və C++ realizasiyası olub web servis applar hazırlamaq və deploy etmək üçün nəzərdə tutulub.

               Maraqlı məsələ ondan ibarətdir ki, qarşı tərəf SOAP Uİ interfeysində bir neçə payload nümunələri vermişdi. Həmin nümunələrdə avtorizasiya formasını əks etdirən informasiyalar yox idi. Consume etdiyim Apache Axis 1.4 versiyası idi və təxminən 13-14 il əvvəl relizə buraxılmış bir şey idi.

               İlk öncə qarşı tərəfin verdiyi servisin işləyib işləmədiyini test etmək lazım idi. Bununçün documantation-da SOAP payload məlumatlar verilmiş, servisin lazımi credential-ları (avtorizasiya üçün lazım olan məlumatlar) orada göstərilmişdi.

SOAP Uİ ilə verilən generasiya olunmuş xml faylları proyektdə əlavə etdim və test etməyə başladım. Test vaxtı avtorizasiya məlumatları tələb olunduğundan ən sadə Basic autorization tətbiq edərək SOAP avtorizasiya həyata keçirtmək istədim. Amma çox maraqlı idi ki, yoxladığım heç bir standard avtorizasiya formaları işləmirdi. Nəticədə məlum oldu ki, SOAP Uİ-da bu servis formasiyla işləmək üçün heç bir avtorizasiya imkanı təqdim olunmayıb. SOAP Config bolməsində Apache Axis ilə bağlı bəzi şeylər tələb edərək işlədiyini deyirdi amma onlar da işə yaramadı. Görünən o idi ki, avtorizasiyanı Header-dan göndərmək lazım idi. Sənədləşmədə SOAP Uİ üzərindən sorğu göndərilməsi üçün əlavə güc sərf etmək lazımdır yazılmışdı. Sadəcə bu.. Həmin əlavə güc nə olmalı idi, indi onu tapmaq lazım idi. İnternetdə təssüfki bu haqda çox ətraflı məlumat tapmaq mümkün deyildi  və 2-3 resursdan topladığım məlumatları icmal edərək SOAP-da header məlumatları ilə avtorizasiya məlumatlarını toparladım .Amma yenə də avtoriaziya uğursuzdur mesajı ilə rastlaşırdım.

Sonda isə toparladıqlarımdan belə bir header məlumatları düzəltmək mümkün oldu.


Təəssüf ki, həmin header məlumatları da haradasa yalnış idi, amma bundan artıq confiqurasiyaay ehtiyac yox idi. Haradasa nə isə yalnış idi .. Üzərində işlədikdən sonra header məlumatlarını bu formaya salmaq oldu və valaaaaa... response gəldi..

 SOAP Uİ uğurlu cavab verikdən sonra artıq proyekti yazmağa keçə bilərdik. Təbii ki, servis hansı səbəbdən işləyib işləməməsindən asılı olaraq yenə də developmenti davam etdirmək olur. Real sistemi mok edərək develpmenti payoload məlumatları əsasında (wsdl) aparmaq mümkündü. Amma url işləsə test etmək , yazdığın kodun doğruluğuna əmin olmaq, integration testləri işə salmaq olar.

.NET Core kitabxanası yaratdıqdan sonra Web Servis reference olaraq əlavə edərkən bəzi problemlərlə rastlaşdım. Bu problem Apache-dən yox, ümumiyyətlə .NET Core-a servis referanslar əlavə edən zaman ortaya çıxır. Bunlar əslində sadəcə məlumat xarakteri daşıyır. Ona görə bu xəbərdarlığı sadəcə bağlayaraq işimizi davam etdirə bilirik.

Servisi çağırmaq və lazımi məlumatları inkapsulyasiya etmək üçün bir servis fabriki formalaşdırdım.

Fabrikanın istifadə etdiyi xüsusi bir bəsit metod ilə Apache Axis ə lazımı məlumatları göndərmək mümkün olurdu. Bu metod AddWssSecurityHeader adlanırdı.

Yekun :

1)SOAPdan Apache Axis servisini çağıran zaman avtorizasiya məlumatlarını  mütləq göstərilən header arasında göndərmək lazımdır.

2) C# dan Apache Axis servisini consume edən zaman Header məlumatlarını yazdığım AddWssSecurityHeader extension metodu ilə (başqa cür implement edə bilərsiniz) göndərə bilərsiniz.

Tural

Tural Süleymani

Süleymani Tural Microsoft-un MCSD statuslu mütəxəssisidir, 2008-ci ildən bu yana proqramlaşdırma üzrə tədris aparır

Müəllifin bu dildə ən son postları

Bu yazıları da bəyənə bilərsiniz