Dağıtık Uygulamalar kategorisi blog kayıtları
Web Services and CookieContainer in .NET Framework 3.5

.NET Framework 3.5 ile birlikte WebServis projelerinde yer alan ufak bir değişiklikten bahsetmek istiyorum.

.NET Framework 2.0 zamanında bir web servis projesinde Session kullanmak için metot üzerinde EnableSession attribute bildirimi yapardık. Client uygulamanın session&pos;ı kaybetmemesi içinde client uygulama içerisinde CookieContainer tanıtırdık. .NET Framework 3.5 ile birlikte bu uygulama biraz değişti, artık CookieContainer tanıtıp bunu web servis nesnenizin CookieContainer property'sine atamıyorsunuz.

Artık client uygulamanızda açılan app.Config dosyasına gidip sadece allowCookies bildirimini true olarak değiştiriyorsunuz. Böylece container tanıtma ve bağlama işlemlerini çözmüş oluyorsunuz

Ufak ama önemli bir ayrıntı :)


Method Overloading in XML Web Services

Method overloading XML Web Servislerinde default olarak desteklenmemektedir. Fakat bu işlemi uygulayabilmemiz için özel bir attribute bildirimi yapılabilmektedir. MessageName isimli attribute ile web servislerinde method overloading uygulayabiliyorsunuz. Bu noktada karşınıza eğer 2.0 veya üstü bir Framework versiyonu ile çalışıyorsanız,

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

satırından kaynaklanan bir hata alırsınız. Hata web servis içeriğinin BasicProfile1_1 kurallarına uymadığı ile ilgilidir. Bu satırın anlamı :

Yazmış olduğunuz web servisin Web Services Interopability Organization's (WS-I) Baisc Profile 1.1 standartlarına uyması gerekliliğidir. Bu standartlardan bir tanesi ise web servislerin metot overloading e uymaması daha açık bir ifade ile, metot isimlerinde unique kuralının arandığıdır. Bu hatayı düzeltmenin yolu ya o satırı silmek ki pek fazla tercih etmediğimiz bir yoldur :)  Bir diğer yol ise attribute bilgisini aşağıdaki gibi değiştirmektir.

[WebServiceBinding(ConformsTo = WsiProfiles.None)]

İyi çalışmalar


XML Web Services

XML Web Servisleri içerisinde kullanılan WebMethod lara verilen Attribute ler ile ilgili kısa açıklamalar :

BufferResponse : Web Servislerde default olarak true degerine sahip olan bu özellik Web Servis den kullanıcılara gönderilecek olan cevap öncelikle önbelleklensin sonra mı gönderilsin yoksa önbellekleme yapılmadan gönderilsin mi, bunun kararını verir. Gönderilen cevabın önbelleklenmesi mesajın bütününün hazırlanması ve sonra gönderilmesi anlamındadır.

 

CacheDuration : CacheDuration özelliği ASP.NET sitelerinden alışık olduğumuz önbellekleme yani cache işlemi için geçerlidir. Saniye cinsinden bir parametre ister.

[WebMethod(CacheDuration=120)] gibi

Yukarıda ki bildirim de web servis metotu 2 dakika boyunca kullanıcılara aynı cevabı verecektir. Ufak bir açıklama, gelen her parametre degerine göre ayrı bir cache otomatik olarak oluşturulacaktır.

 

Description: Açıklamaya gerek var mı J

 

EnableSession : Default değeri false olan bu özelliğin amacı webmethod içerisinde Session isimli nesnenin kullanılabilmesini sağlamaktır. Fakat bu özellikten faydalanırken Web Servislerinde ki stateless yapıdan dolayı Client uygulama üzerinde CookieContainer kullanılmalıdır. Örnek için bkz :

http://www.yazilimuzmani.com/Articles/Details.aspx?aId=1000000438

 

MessageName : MessageName özelliği ise Webservisler de Metot overloading yapmak istediginizde kullanmak zorunda kalacağınız bir özelliktir. Web Servisler de bir metotu overload ederseniz kurallara uygun olsa dahi, MessageName özelliğinin kullanılması gerektiğine dair bir hata alacaksınız. O yüzden kullanım aşağıdaki gibi olmalıdır.

    [WebMethod(MessageName="HelloWorldSimple")]

    public string HelloWorld() {

        return "Hello World";

    }

 

    [WebMethod(MessageName="HelloWorldAdvanced")]

    public string HelloWorld(string name)

    {

        return "Hello " + name;

    }

 

TransactionOption : Web Servislere Transaction özelliğinin eklenmesi ile birlikte artık COM+ mantığına yakın bir şekilde Transaction yönetimi yapabiliyorsunuz.

[WebMethod(TransactionOption = TransactionOption.RequiresNew)]