09 Mart 2007

AJAX Extension kurulu olmayan sunucuda ASP.NET AJAX projesi çalıştırmak

Son zamanlarda gerek mail yoluyla, gerek yakın çevremden en fazla aldığım sorulardan ve sorunlardan biri de, yapılan bir ASP.NET AJAX projesinin bir sunucuya atıldığında çalışmamasıydı. Bildiğiniz gibi ASP.NET AJAX tam sürümü ile birlikte artık Global Assembly Cache'e atılan dll kütüphaneleri üzerinde çalışmaya başladı.(Yani artık Bin dizini içerisine referans olarak dll dosyaları eklenmiyor) Sorunu çözebilmek için bloglardan ve forumlardan biraz araştırma yaptım ama ilgili bir konu bulamadım. Birkaç denemeden sonra (sanırım) sorunu çözdüm. Yapılması gereken işlemler şunlar:

1- Öncelikli olarak ASP.NET AJAX projenize Bin dizini açın ve buraya referans olarak System.Web.Extensions.dll ve System.Web.Extensions.Design.dll dosyalarını ekleyin. Bu dll kütüphanelerini C:\Program Files\Microsoft ASP.NET\ASP.NET 2.0 AJAX Extensions\v1.0.61025 dizininden elde edebilirsiniz.

2- Uygulamanızın web.config dosyasında bazı değişiklikler yapmanız gerekecek. Buradaki bazı tanımlamalardaki type ifadeleri içerisinde yer alan System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 kısımlarındaki Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 ifadelerini kaldırmanız gerekecektir. Bu kısımlar, zaten dll dosyalarının Global Assembly Cache'den okunmasını sağlayan açıklamalardır. Bu şekilde artık uygulama GAC'daki dll dosyalarını değil, Bin dizinindeki dll dosyalarını kullanacaktır. (Bu işlemi Find-Replace ile kolayca yapabilirsiniz.)


3- Son olarak uygulamanın bulunduğu dizini virtual directory (sanal dizin) olarak tanımlamak gerekecek.

Bu üç adımı takip ederek hazırlayacağınız bir projeyi, artık AJAX Extension kurulu olmayan bir sunucuda çalıştırabilirsiniz. Bazı durumlarda hata alabilme olasılığınız olabilir. Aldığınız hataları bana iletirseniz yardımcı olmaya çalışırım.

14 yorum:

Kursat dedi ki...

Denedim bu dediğini localde oldu ama server a koydum aynı hatayı verdi. Hani şu klasik hata var ya;
Description: An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine.

Details: To enable the details of this specific error message to be viewable on remote machines, please create a tag within a "web.config" configuration file located in the root directory of the current web application. This tag should then have its "mode" attribute set to "Off".


işte bu hatayı verdi. takip ediyor olacağım siteni umarım halledersin ;) Kolay gelsin

Uğur UMUTLUOĞLU dedi ki...

Merhaba,

Aldığınız mesaj sadece sayfada hata olduğunu söylüyor, yani neye hata veriyor tam olarak belli değil. web.config de CustomErrors kısmını değiştirip asıl hata mesajını yollarsanız daha iyi bir yorum yapabilirim.

Kursat dedi ki...

Abi o errorlar nasıl gösteriliyor bilmiyorum. Zaten bu gelen ekran yüzünden webten soğuyorum o da nasıl oluyor bi gösterirsen çok memnun olurum. Sana ilgili web config dosyasını rarlıyorum http://www.muhendissoft.com/ajax/web.rar

Kursat dedi ki...

Abi tamam dediğin olayı yaptım sayfa şu http://www.muhendissoft.com/ajax/
aldığım hata da ekranda

Uğur UMUTLUOĞLU dedi ki...

Gerekli assembly dosyasını yükleyemediği için böyle bir hata veriyor. Öncelikli olarak Bin dizini içerisinde aynı isimdeki dll dosyasının olduğundan emin olunuz. Eğer varsa bir de Bin dizini ile ilgili okuma-yazma haklarını da kontrol ediniz. Bunun dışında hata aldığınız satırın altındaki ifadelerde hala "Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" ifadeleri duruyor. Onları da kaldırmanız gerekecek.

Sinan dedi ki...

Umut abi onu da denedim olmadı. Sorunu bi türlü anlayamadım.. Neyse abi sağolasın ilgin için. Kolay gelsin..

Uğur UMUTLUOĞLU dedi ki...

Merhabalar,

Sorun sanırım sizin site içinde ayrı bir dizine uygulamayı atmanız. Böyle bir durumda bu klasörü virtual directory olarak tanımlamanız gerekecek. (yazıya yeni eklediğim 3 numaralı madde)

Unknown dedi ki...

Hocam öncelikle merhabalar bu dediğiniz "3- Son olarak uygulamanın bulunduğu dizini virtual directory (sanal dizin) olarak tanımlamak gerekecek." Bu maddeyi tam olarak anlamadım beni daha ayrıntılı bilgilendirirsen çok sevinirim ve birşey daha var
section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions" requirePermission="false" allowDefinition="MachineToApplication"
sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions"
section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions" requirePermission="false" allowDefinition="Everywhere"
section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions" requirePermission="false" allowDefinition="MachineToApplication"
section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions" requirePermission="false" allowDefinition="MachineToApplication" kısımlarında (requirePermission="false") bölümlerinde hata olduğunu gösteriyor bunu nasıl önliyebiliriz.Cevabını en kısa zamanda bekliyorum.Böyle bir siteyle bizlere yardımcı olduğun içinde çok teşekkür ederim...

Uğur UMUTLUOĞLU dedi ki...

Sanal dizin oluşturmak için http://www.r10.net/asp-net/29996-sanal-dizin-virtual-directory-olusturmak.html linkindeki yazıya göz atabilirsiniz. Aldığınız hatadan emin olabilmem için ilgili hatanın olduğu linki bana yollar mısınız? Ama tahminimce sanal dizin oluşturursanız bu sorun hallolacaktır.

Unknown dedi ki...

wallaha hocam senin dediklerini yaptım sitede yayınlayınca sorun çıkmasın diye yanlız senin dediğin yaptığı zaman requirePermission="false"
için """ The 'requirePermission' attribute is not declared """ diye bi hata verdi ve ben bunu direk sildim yanlız ne kadar doğru yaptım onu bilemiyorum

ahmet çelik dedi ki...

ajax projesini çalıştırıyoruz ama ajaxın update panel özeliginde sayfanın postback olayı gercekleşmemesi lazımken sayfa yenileniyor...Yani sanki ajax yokmuş gibi...

Uğur UMUTLUOĞLU dedi ki...

ScriptManager'in EnablePartialRendering özelliğini True yapın. Bir de UpdatePanel'e eklediğiniz kontrolün PostBackTrigger değilde AsyncPostBackTrigger olarak eklendiğinden emin olunuz. Sorun yine devam ediyorsa projenin tamamını zipleyip ugur.umutluoglu [at] msakademik.net mail adresine yollarsanız kontrol edip size cevap dönmeye çalışırım.

Unknown dedi ki...

Extender control 'MyAccordion_AccordionExtender' is not a registered extender control. Extender controls must be registered using RegisterExtenderControl() before calling RegisterScriptDescriptors().
Parameter name: extenderControl
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentException: Extender control 'MyAccordion_AccordionExtender' is not a registered extender control. Extender controls must be registered using RegisterExtenderControl() before calling RegisterScriptDescriptors().
Parameter name: extenderControl

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:


herşey iyi gidiyordu bu çıktı anlayan varmı

Ümit Kavala dedi ki...

Merhaba ben çok basit bir uygulamayı bu şekilde denedim. Sayfaya bir DropDownList ve bir Label koydum. DropDownlist in AutoPostBack özelliğini "True" yaptım. Ve seçilen item in değerini Label a yazan tek satır bir kod yazdım. Çalıştı ama ben ne seçersem seçeyim default olarak dropdownlist in ilk item i seçili oluyor ve label da ilk item in değeri yazıyor. Bunun dışında bir sorun yok :) Sayfa postback yapmıyor bu arada ajax varmış gibi çalışıyor. http://www.set-soft.com/ajax