6 Temmuz 2012 Cuma

SOAP Extension Nedir Nasıl Çalışır?


“SOAP Extension” ASP.NET tarafınsan sunulan, alınan ve gönderilen SOAP mesajlarının özelleştimemizi sağlayan bir mekanizmadır.  Aşağıda gösterildiği gibi özelleştirmek istediğimiz bir web metodunun mesajında ele alacağımız dört nokta vardır.

SOAP mesajının deserialize işleminden önce ve serialize işleminden sonra bir özelleştirme yaptığımızda şekil şöyle olur:


SoapExtensionAttribute Kullanımı
SoapExtension sınıfını bir web metodunun giriş ve çıkış rotasına koymak için bu web metodundan önce, ExtensionType özelliği framework’e hangi SoapExtension sınıfının kullanacağını gösteren, SoapExtensionAttribute sınıfı kullanılmalıdır.
Metotdan önce birden fazla SoapExtensionAttributes olduğunda framework’e hangi SoapExtension’ın mesajı önce işleyeceğine gösteren priority özelliği vardır. Bu durumda ilk SoapExtension’ın çıktısı sonrakinin girdisi olmaktadır.

Her web metodu çağrısı için SoapExtension’ın bir örneği oluşturulmaktadır. Böylece metot çağrısının geliş ve gidiş süreci takip edilir.
SoapExtensionAttribute metodun ilk çağrısında yüklenir ve sonraki çağrılar için önbelleğe (cached) alınır. SoapExtensionAttribute sınıfı ilgili SoapExtension nesnesini hazırlamak için başka özelliklere de sahip olabilir. Bunlar web metodunun önüne parantez içinde atanır. Metot her çağrıldığında framework attribute nesnesini cache’den alır, ilgili SoapExtension nesnesini oluşturur ve Initialize metodunu bu attribute nesnesi ile çağırır.

SoapExtension ve Mesajların Gidişi
SoapExtension sınıfı biri uygulama yönünde diğeri wire yönünde iki kanalla bağlıdır. Tipik bir SoapExtension uygulaması wire ve uygulama kanalını ele alır. SoapExtension’ı upstream and downstream’e bağlamak için framework ChainStream metodunu çağırır. Bu metodun tipik bir uygulaması şöyledir.


Tüm senaryo is şu şekildedir. 
1.       Bir SOAP mesajı gelir. Framework SoapExtension nesnesinin bir örneğini oluşturarak çalıştırır.
2.       Framework “wire stream”i ona bağlamak için SoapExtension’ın ChainStream methodunu çağırır ve yeni oluşturulmuş bir MemoryStream buffer alır.
3.       Framework SoapExtension’ın ProcessMessage methodunu çağırır. Bu metot SOAP mesajını  “wire stream” den alır, bazı özelleştimeler yapar ve bu özelleşmiş mesajı “application stream handle” vasıtasıyla MemoryStream buffer’ına yazar.
4.       MemoryStream buffer’ındaki bu mesaj uygulamada bir nesne haline gelene kadar SoapExtensions’ gider.
5.       Döndürülen nesne serialize edildikten sonra Framework SoapExtension nesnesinin ChainStream metodunu çağırır.

Hiç yorum yok:

Yorum Gönder