“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