<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
> <channel><title>Fatih&#039;in Notları &#187; Asp.Net</title> <atom:link href="http://www.enterprisecoding.com/blog/post/category/turkce/aspnet/feed" rel="self" type="application/rss+xml" /><link>http://www.enterprisecoding.com/blog</link> <description>Unutmamak için web defterime not düştüklerim</description> <lastBuildDate>Fri, 03 Feb 2012 21:23:07 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <item><title>Otomatik Olarak ASP.Net Uygulaması Hata Dökümünü Alma</title><link>http://www.enterprisecoding.com/blog/post/otomatik-olarak-asp-net-uygulamasi-hata-dokumunu-alma</link> <comments>http://www.enterprisecoding.com/blog/post/otomatik-olarak-asp-net-uygulamasi-hata-dokumunu-alma#comments</comments> <pubDate>Sun, 05 Sep 2010 21:15:21 +0000</pubDate> <dc:creator>Fatih Boy</dc:creator> <category><![CDATA[Asp.Net]]></category> <category><![CDATA[Türkçe]]></category> <category><![CDATA[Dump]]></category> <category><![CDATA[IIS]]></category> <guid
isPermaLink="false">http://www.enterprisecoding.com/blog/post/otomatik-olarak-asp-net-uygulamasi-hata-dokumunu-alma</guid> <description><![CDATA[&#160;&#160; Otomatik çalışan sistemleri uzaktan yönetiyorsanız hata oluşması durumunda hata dökümünü (error dump) almanın problemi tespit etmek adına ne kadar önemli olduğunu biliyorsunuzdur. Hata dökümü almada genelde yaşanılan sıkıntı hataların anlık oluşması nedeniyle hata dökümünün alınmasına fırsat olmamasıdır. Bu gibi durumlarda Windows Server 2008 SP1, Windows Vista SP1’den itibaren gelen Windows Error Reporting (WER) hayat [...]
Related posts:<ol><li><a
href='http://www.enterprisecoding.com/blog/post/windowsta-otomatik-login' rel='bookmark' title='Windows’ta otomatik login'>Windows’ta otomatik login</a></li><li><a
href='http://www.enterprisecoding.com/blog/post/programsal-olarak-bir-asp-net-sayfasina-veri-gondermek' rel='bookmark' title='Programsal Olarak Bir ASP.Net Sayfasına Veri Göndermek'>Programsal Olarak Bir ASP.Net Sayfasına Veri Göndermek</a></li><li><a
href='http://www.enterprisecoding.com/blog/post/acilista-otomatik-yuklenen-vsip-paketlerinde-bos-gelen-dteler' rel='bookmark' title='Açılışta Otomatik Yüklenen VSIP Paketlerinde Boş Gelen DTE’ler'>Açılışta Otomatik Yüklenen VSIP Paketlerinde Boş Gelen DTE’ler</a></li></ol>]]></description> <content:encoded><![CDATA[<div
class="addthis_toolbox addthis_default_style " addthis:url='http://www.enterprisecoding.com/blog/post/otomatik-olarak-asp-net-uygulamasi-hata-dokumunu-alma' addthis:title='Otomatik Olarak ASP.Net Uygulaması Hata Dökümünü Alma '  ><a
class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a
class="addthis_button_tweet"></a><a
class="addthis_button_google_plusone" g:plusone:size="medium"></a><a
class="addthis_counter addthis_pill_style"></a></div><p
align="justify">&#160;&#160; Otomatik çalışan sistemleri uzaktan yönetiyorsanız hata oluşması durumunda hata dökümünü (error dump) almanın problemi tespit etmek adına ne kadar önemli olduğunu biliyorsunuzdur. Hata dökümü almada genelde yaşanılan sıkıntı hataların anlık oluşması nedeniyle hata dökümünün alınmasına fırsat olmamasıdır. Bu gibi durumlarda Windows Server 2008 SP1, Windows Vista SP1’den itibaren gelen <a
href="http://www.microsoft.com/whdc/winlogo/maintain/StartWER.mspx" target="_blank">Windows Error Reporting</a><strong></strong> (<em>WER</em>) hayat kurtarıcı olabiliyor. Aşağıdaki paylaşacağım adımları takip ederek hata durumlarında otomatik hata dökümü alınmasını sağlayabilir ve daha sonra bu dökümlerden yola çıkarak hatanın kaynağını tespit edebilirsiniz.</p><p
align="justify">&#160;&#160; Öncelikle <em>WER</em>’e hatalarının tespit edilmesini istediğiniz process’i belirtmelisiniz. Bunu için kayıt kütüğünde öncelikle aşağıdaki girdiyi oluşturmalısınız;</p><blockquote><p
align="justify">HKLM\Software\Microsoft\Windows\Windows Error Reporting\LocalDumps\w3wp.exe</p></blockquote><p
align="justify">&#160;&#160; ASP.Net uygulamaları <strong>w3wp.exe</strong> process’i altında çalıştığı için burada takip edilmesi için w3wp.exe process adını veriyoruz; fakat hatalara karşı takip edilmesini istediğiniz farklı bir uygulama olursa bu uygulamanın process adını burada kullanabilirsiniz.</p><p
align="justify">&#160;&#160; Bu kayıt kütüğü girdisi altına aşağıdaki 3 kritik anahtarı da eklemeniz gerekmek;</p><table
border="1" cellspacing="0" cellpadding="2" width="600"><tbody><tr><th
width="82">Anahtar adı</th><th
width="118">Veri Türü</td></th><th
width="111">Değer</th><th
width="287">Açıklama</th></tr><tr><td
valign="top" width="82">DumpFolder</td><td
width="118">REG_EXPAND_SZ</td><td
valign="top" width="111">C:\HataDokumlari</td><td
valign="top" width="287">Hata dökümlerinin saklanacağı klasör adı. Otomatik olarak oluşan hata dokümleri sistem tarafında bu klasörde saklanacaktır. Varsayılan olarak %LOCALAPPDATA%\CrashDumps klasörü kullanılmaktadır.</td></tr><tr><td
valign="top" width="82">DumpCount</td><td
width="118">REG_DWORD</td><td
valign="top" width="111">5</td><td
valign="top" width="287">Maksimum alınacak olan hata döküm sayısı. Varsayılan olarak maksimum 10 döküm.</td></tr><tr><td
valign="top" width="82">DumpType</td><td
width="118">REG_DWORD</td><td
valign="top" width="111">2</td><td
valign="top" width="287">Hata döküm türü; <br
/><ul><li>0: Özel Hata Dökümü</li><li>1: Mini Hata Dökümü</li><li>2: Tam Hata Dökümü</li></ul><p> Varsayılan olarak mini hata dökümü alınır. <br
/>(.Net uygulamalarının hatalarının incelenmesinde genellikle tam hata dökümüne ihtiyaç duyulmaktadır)</td></tr></tbody></table><p
align="justify">&#160;&#160; Bu noktada önemle düşmem gereken bir not var; hata dökümleri dökümü alınan uygulamanın o sırada hafızada kapladığı alanla doğru orantılı olarak yüksek miktarda disk alanını kaplayabilmektedirler. Bu sebeple alınacak hata döküm sayısı ve yerinin seçimi önemlidir.</p><p
align="justify">&#160;&#160; Diğer uygulama türlerinden farklı olarak .Net uygulamalarında bir hata oluşması durumunda JIT Debugger diyaloğu açılmaktadır. Bu durum da <em>WER</em>’in hatayı farketmesini ve hata dökümü almasını engelleyecektir. Bu durumdan kaçınmak için kayıt kütüğünde aşağıdaki düzenlemeyi yaparak hata durumunda JIT Debugger’ın devreye girmesini durdurmalısınız.</p><blockquote><p
align="justify">HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug</p></blockquote><p
align="justify">&#160;&#160; Yukarıdaki kayıt kütüğü düğümü altında yer alan <em>Debugger</em> anahtarının adını değiştirin (alternatif olarak bu anahtar silinebilir; fakat ileride ihtiyacınız olabileceğinden yapılmasını tavsiye etmem). Bu konuda daha detaylı bilgiyi <a
title="http://technet.microsoft.com/en-us/library/cc939486.aspx" href="http://technet.microsoft.com/en-us/library/cc939486.aspx">http://technet.microsoft.com/en-us/library/cc939486.aspx</a> adresinde bulabilirsiniz.</p><p
align="justify">&#160;&#160; Bu adımların takip edilmesi ve gerekli düzenlemelerin yapılması sonrasında IIS üzerinde hizmet veren ASP.Net uygulamanızda bir hata oluşması durumunda WER devreye girerek hata dökümünü alarak belirttiğiniz klasör altına koyacaktır.</p><p
align="justify">&#160;&#160; Bu konuda son bir önemli not; .Net uygulamaları içerisinde yakalanamayan hataların yönetilebilmesi için bazı yöntemler bulunmaktadır (<a
href="http://msdn.microsoft.com/en-us/library/system.windows.forms.application.threadexception.aspx" target="_blank">Application.ThreadException olay bildirimi</a> ya da ASP.Net error handler’ları gibi). Eğer uygulamanız içerisinde bu yöntemlerden biriyle hata yönetimi yapıyorsanız, oluşan hatalar uygulamanızca yakalancağı için (beklenmeyen ve uygulamanızın çalışmasını durdurmayan bir hata olduğu için) WER devreye girmeyecektir.</p><p>Related posts:<ol><li><a
href='http://www.enterprisecoding.com/blog/post/windowsta-otomatik-login' rel='bookmark' title='Windows’ta otomatik login'>Windows’ta otomatik login</a></li><li><a
href='http://www.enterprisecoding.com/blog/post/programsal-olarak-bir-asp-net-sayfasina-veri-gondermek' rel='bookmark' title='Programsal Olarak Bir ASP.Net Sayfasına Veri Göndermek'>Programsal Olarak Bir ASP.Net Sayfasına Veri Göndermek</a></li><li><a
href='http://www.enterprisecoding.com/blog/post/acilista-otomatik-yuklenen-vsip-paketlerinde-bos-gelen-dteler' rel='bookmark' title='Açılışta Otomatik Yüklenen VSIP Paketlerinde Boş Gelen DTE’ler'>Açılışta Otomatik Yüklenen VSIP Paketlerinde Boş Gelen DTE’ler</a></li></ol></p>]]></content:encoded> <wfw:commentRss>http://www.enterprisecoding.com/blog/post/otomatik-olarak-asp-net-uygulamasi-hata-dokumunu-alma/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Programsal Olarak Bir ASP.Net Sayfasına Veri Göndermek</title><link>http://www.enterprisecoding.com/blog/post/programsal-olarak-bir-asp-net-sayfasina-veri-gondermek</link> <comments>http://www.enterprisecoding.com/blog/post/programsal-olarak-bir-asp-net-sayfasina-veri-gondermek#comments</comments> <pubDate>Sat, 29 May 2010 14:15:44 +0000</pubDate> <dc:creator>Fatih Boy</dc:creator> <category><![CDATA[Asp.Net]]></category> <category><![CDATA[Türkçe]]></category> <category><![CDATA[C#]]></category> <guid
isPermaLink="false">/blog/post/Programsal-Olarak-Bir-ASP-Net-Sayfasina-Veri-Gondermek.aspx</guid> <description><![CDATA[Kimi zaman yazmış olduğunuz bir web sitesini test etmek isteyebilirsiniz. Bu testin amacı sayfanın beklenildiği gibi çalıştığını otomatik olarak doğrulamak olabileceği gibi, web sitenizi bir yük testine tabii tutarak gerçek ortamda kaldırabileceği yükü görmek de olabilir. Bu makalemde sizlerle asp.net ile yazılmış bir web sitesine C# ile nasıl veri gönderilebileceğini ve test edilebileceğini paylaşacağım. HTTP [...]
Related posts:<ol><li><a
href='http://www.enterprisecoding.com/blog/post/c-programsal-olarak-appfabric-cache-host-bilgisine-erismek' rel='bookmark' title='C# Programsal Olarak AppFabric Cache Host Bilgisine Erişmek'>C# Programsal Olarak AppFabric Cache Host Bilgisine Erişmek</a></li><li><a
href='http://www.enterprisecoding.com/blog/post/tip-powershell-oturumu-sistem-yoneticisi-olarak-mi-baslatilmis' rel='bookmark' title='Tip : PowerShell Oturumu Sistem Yöneticisi Olarak Mı Başlatılmış?'>Tip : PowerShell Oturumu Sistem Yöneticisi Olarak Mı Başlatılmış?</a></li></ol>]]></description> <content:encoded><![CDATA[<div
class="addthis_toolbox addthis_default_style " addthis:url='http://www.enterprisecoding.com/blog/post/programsal-olarak-bir-asp-net-sayfasina-veri-gondermek' addthis:title='Programsal Olarak Bir ASP.Net Sayfasına Veri Göndermek '  ><a
class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a
class="addthis_button_tweet"></a><a
class="addthis_button_google_plusone" g:plusone:size="medium"></a><a
class="addthis_counter addthis_pill_style"></a></div><p>Kimi zaman yazmış olduğunuz bir web sitesini test etmek isteyebilirsiniz. Bu testin amacı sayfanın beklenildiği gibi çalıştığını otomatik olarak doğrulamak olabileceği gibi, web sitenizi bir yük testine tabii tutarak gerçek ortamda kaldırabileceği yükü görmek de olabilir. Bu makalemde sizlerle asp.net ile yazılmış bir web sitesine C# ile nasıl veri gönderilebileceğini ve test edilebileceğini paylaşacağım.</p><p>HTTP protokolü üzerinden bir web sayfasına HEAD, GET, POST, PUT, DELETE, TRACE, OPTIONS, CONNECT, PATCH yöntemleri kullanılarak veri gönderilebilir. Bu yöntemler arasında en sık tercih edilenler ise GET ve POST’tur. Standart bir asp.net web sayfası, form verilerini bu yöntemlerden POST’u kullanarak göndermektedir.</p><p>HTTP POST metodunda veri sunucuya isteğin bir parçası olarak iletilmektedir.Verinin sadece URL’nin bir parçası olarak iletildiği GET metodundan farklı olarak POST metodunda istek içerisinde mesaj vucudu (message body) da yer almaktadır; ki bu da değişken bir boyutta ve formattaki verinin kolaylıkla sunucuya iletilebilmesine olanak sağlamaktadır.</p><p>Web sayfası içerisinden yapılan standart bir POST isteği genellikle &#8220;<em>application/x-www-form-urlencoded</em>&#8221; içerik türüne sahiptir ve gönderilen her bir anahtar-değer ikilisi birbirinden &#8220;<em>&amp;</em>&#8221; karakteri ile ayrılmaktadır. Anahtar ve değer arasında ise &#8220;<em>=</em>&#8221; karakteri yer almaktadır. Gönderilen veri içerisindeki boşluklar &#8220;<em>+</em>&#8221; karakteri ile yer değiştirdikten sonra da kalan diğer karakterlere URL encoding uygulanır.</p><table
border="1" cellspacing="0" cellpadding="0" width="400"><tbody><tr><th
valign="top" width="200">Anahtar</td></th><th
valign="top" width="200">Değer</td></tr></th></tr><tr><td>Adi</td><td>Ali Veli</td></tr><tr><td>Soyadi</td><td>Örnek</td></tr><tr><td>Sehir</td><td>İzmir</td></tr><tr><td>Ulke</td><td>Türkiye</td></tr></tbody></table><p>Yukarıdaki örnek anahtar-değer ikilileri için oluşturulacak olan POST istek içeriğini aşağıda bulabilirsiniz;</p><blockquote><p>&#160;</p><p>Adi=Ali+Veli&amp;Soyadi=%c3%96rnek&amp;Sehir=%c4%b0zmir&amp;Ulke=T%c3%bcrkiye</p></blockquote><p>Görüldüğü gibi Türkçe karakterler de encode edilerek POST içeriğine eklenmiş durumda.</p><p>Pek çok web sayfasına C# kullanarak otomatik veri göndermek aslında kolay bir iştir; <em>HttpWebRequest</em> sınıfı vasıtasıyla bir istek oluşturarak ve sayfanın adresini vererek göndermeniz yeterli olmakta. Temelde ASP.Net sayfalarına veri gönderimi de aynı yolu izliyor olmasına karşın başarılı bir gönderim için bilmeniz gereken ufak bir kaç püf noktası bulunmakta.</p><p>ASP.Net web formunun geri bildirimlerde (PostBack) kontrollerin durumunu koruyabilmek/takip edebilmek adına view state yöntemini kullanmaktadır. Kontrollarin geri bildirimlerde hatırlanması istenen özellikleri form içerisinde gizli bir değişkende saklanmaktadır. Her geri bildirim de bu değişken değeri asp.net tarafından okunarak kontrollerin durumları yeniden ayarlanır. Form içerisinde view state’i tutan bu gizli olarak konumlanmış olan değişkeninin adı ise&#160; __VIEWSTATE’tir. Programsal olarak yapılacak bir form gönderiminde form içerisindeki alanlara ait değerleri göndermenin yanı sıra bu değişkeninde gönderilmesi gerekmektedir; aksi takdirde gönderimimiz başarısız olacaktır.</p><p>Yukarıdaki bilgiler ışığında, bir asp.net web sayfasına programsal olarak veri gönderebilmek için öncelikle sayfanın url’si ile birlikte bir <em>HttpWebRequest</em> oluşturmalıyız;</p><pre class="brush: csharp; title: ; notranslate">var webRequest = (HttpWebRequest)WebRequest.Create(&quot;[WEB SAYFASININ ADRESI]&quot;);</pre><p>Web request&#8217;im method olarak HTTP POST&#8217;u kullanmalı;</p><pre class="brush: csharp; title: ; notranslate">webRequest.Method = &quot;POST&quot;;</pre><p>İçerik türü olarak <em>application/x-www-form-urlencoded</em> kullanılmalı;</p><pre class="brush: csharp; title: ; notranslate">webRequest.ContentType = &quot;application/x-www-form-urlencoded&quot;;</pre><p>Göndermek istediğiniz string formatındaki veriyi byte dizisi haline çevirmelisiniz;</p><pre class="brush: csharp; title: ; notranslate">var tampon = Encoding.UTF8.GetBytes(&quot;[GÖNDERİLECEK İÇERİK]&quot;);</pre><p>Göndereceğimiz içeriğin boyutu belirtilmeli;</p><pre class="brush: csharp; title: ; notranslate">webRequest.ContentLength = tampon.Length;</pre><p>Son olarak da veri istek stream’i içerisine yazılmalı ve yanıt okunmalıdır;</p><pre class="brush: csharp; title: ; notranslate">using (var istekStream = webRequest.GetRequestStream()) {
   istekStream.Write(tampon, 0, tampon.Length);
}
var yanit = (HttpWebResponse)webRequest.GetResponse();
var yanitIcerigi = string.Empty;
using (var responseStream = yanit.GetResponseStream()) {
   var streamReader = new StreamReader(responseStream);
   yanitIcerigi = streamReader.ReadToEnd();
}</pre><p>Tüm kodu bir araya toparlayacak olursak;</p><pre class="brush: csharp; title: ; notranslate">var tampon = Encoding.UTF8.GetBytes(gonderilecekVeri);
var webRequest = (HttpWebRequest)WebRequest.Create(&quot;[WEB SAYFASININ ADRESI]&quot;);
webRequest.Method = &quot;POST&quot;;
webRequest.ContentType = &quot;application/x-www-form-urlencoded&quot;;
webRequest.ContentLength = tampon.Length;
webRequest.Proxy = new WebProxy((string)null, true);
using (var istekStream = webRequest.GetRequestStream()) {
   istekStream.Write(tampon, 0, tampon.Length);
}
var yanit = (HttpWebResponse)webRequest.GetResponse();
var yanitIcerigi = string.Empty;
using (var responseStream = yanit.GetResponseStream()) {
   var streamReader = new StreamReader(responseStream);
   yanitIcerigi = streamReader.ReadToEnd();
}</pre><p>Buraya kadar anlattıklarım işin kolay kısmıydı aslına bakarsanız; bu yöntemle herhangi bir web sayfasına HTTP POST metodu ile veri gönderebilirsiniz; fakat asp.net sayfalarına göndereceğiniz veri içerisinde view state’de yer almalıdır. Rastgelen oluşturacağınız bir view state değerinin işinizi hiç bir şekilde çözmeyeceğini baştan söylemeliyim. Peki bu durumda view state değeri nasıl oluşturabilirim? Bu sorunun yanıtı aslında basit; view state değerini siz oluşturmayacaksınız.</p><p>Web tarayıcınız üzerinden dolaştığınız, formlarını doldurduğunuz bir asp.net sayfasını düşünün. Böyle bir sayfada ilk isteğinizle birlikte bir view state değeri oluşturularak form içerisindeki gizli __VIEWSTATE alanına değer olarak atanır, siz sayfadaki kontrollerin değerlerini değiştirdikçe, formları gönderdikçe bu gizli alan da gideceği için asp.net hatasız şekilde view state’i yönetecektir.</p><p>Programsal olarak bir asp.net sayfasına veri bildirimi yapmak istiyorsak, yapmamız gereken de aslında tam olarak yukarıda örneklediğim web tarayıcısı davranışı taklit etmektir. İlk önce bir istek yaparak sayfanın ve view state’in oluşmasını sağlamalı, ardından bu değerleri kullanarak form’u doldurup göndermeliyiz.</p><pre class="brush: csharp; title: ; notranslate">private string IlkIstek(string sayfaAdresi) {
   var webClient = new WebClient();
   using (var stream = webClient.OpenRead(sayfaAdresi)) {
      var streamReader = new StreamReader(stream);
      return streamReader.ReadToEnd();
   }
}</pre><p>IlkIstek metodu bizim için verdiğimiz bir adrese istek yaparak gelen yanıtı iletmekte. Aşağıdaki AlanDegeriniBul metodu kullanılarak bu yanıt içerisindeki istenen herhangi bir input alanı değeri alınabilir.</p><pre class="brush: csharp; title: ; notranslate">private string AlanDegeriniBul(string sayfaIcerigi, string alanAdi) {
   var pattern = &quot;&lt;input.*id=\&quot;&quot; + alanAdi + &quot;\&quot;.*value=\&quot;(?&lt;deger&gt;.*?)\&quot;.*/&gt;&quot;;
   var regex = new Regex(pattern, RegexOptions.IgnoreCase);
   var match = regex.Match(sayfaIcerigi);
   if (match != null &amp;&amp; match.Groups[&quot;deger&quot;].Success &amp;&amp; match.Groups.Count &gt; 0) {
      return match.Groups[&quot;deger&quot;].Value;
   }
   return string.Empty;
}</pre><p>AlanDegeriniBul metodu verilen alan adının değerini bulmak için sayfa içeriğinde bir düzenli ifade araması yapmaktadır. Verilen ifadeye uygun bir grup bulunması durumunda değer dönmekte, aksi durumlarda ise boş bir string dönmektedir.</p><p>IlkIstek ve AlanDegeriniBul metodlarının aşağıdaki şekilde kullanılması sonucunda ihtiyacımız olan view state değerine ulaşmış olacağız.</p><pre class="brush: csharp; title: ; notranslate">var ilkSayfaIcerigi = IlkIstek(&quot;[WEB SAYFASININ ADRESI]&quot;);
var viewState = AlanDegeriniBul(ilkSayfaIcerigi, &quot;__VIEWSTATE&quot;);</pre><p>Elde ettiğimiz bu view state değerini de önceki alanların sonuna ekleyerek isteğimizi gerçekleştirebiliriz.</p><pre class="brush: csharp; title: ; notranslate">var ilkSayfaIcerigi = IlkIstek(&quot;[WEB SAYFASININ ADRESI]&quot;);
var viewState = AlanDegeriniBul(ilkSayfaIcerigi, &quot;__VIEWSTATE&quot;);
var tampon = Encoding.UTF8.GetBytes(gonderilecekVeri + &quot;&amp;__VIEWSTATE=&quot; + HttpUtility.UrlEncode(viewState));
var webRequest = (HttpWebRequest)WebRequest.Create(&quot;[WEB SAYFASININ ADRESI]&quot;);
webRequest.Method = &quot;POST&quot;;
webRequest.ContentType = &quot;application/x-www-form-urlencoded&quot;;
webRequest.ContentLength = tampon.Length;
webRequest.Proxy = new WebProxy((string)null, true);
using (var istekStream = webRequest.GetRequestStream()) {
   istekStream.Write(tampon, 0, tampon.Length);
}
var yanit = (HttpWebResponse)webRequest.GetResponse();
var yanitIcerigi = string.Empty;
using (var responseStream = yanit.GetResponseStream()) {
   var streamReader = new StreamReader(responseStream);
   yanitIcerigi = streamReader.ReadToEnd();
}</pre><p>Bu yöntem kullanılarak olay doğrulama (event validation) özelliği aktif edilmemiş tüm asp.net sayfalarına veri bildirimi yapabilirsiniz.</p><p>Olay doğrulama özelliği açılmış asp.net sayfalarında yukarıdaki koda ufak bir ekleme yaparak asp.net’in olay doğrulamasınca beklenen __EVENTVALIDATION alan değerini de bulup göndermemiz gerekli.</p><p>Asp.Net oturumları takip edebilmek için her bir oturuma özel tekil bir değeri istemciye çerez olarak iletmekte ve bir sonraki istekte bu bilgiye göre ilgili oturumda işlem yaptırmaktadır. Bu durumda oturum bilgisinin tutulduğu ve oturum gerektiren sayfalara veri gönderebilmek için bir CookieContainer oluşturup istekle ilişkilendirmelisiniz.</p><pre class="brush: csharp; title: ; notranslate">var ilkSayfaIcerigi = IlkIstek(&quot;[WEB SAYFASININ ADRESI]&quot;);
var viewState = AlanDegeriniBul(ilkSayfaIcerigi, &quot;__VIEWSTATE&quot;);
var eventValidation = AlanDegeriniBul(ilkSayfaIcerigi, &quot;__EVENTVALIDATION&quot;);
var tampon = Encoding.UTF8.GetBytes(gonderilecekVeri +
                string.Format(&quot;&amp;__VIEWSTATE={0}&amp;__EVENTVALIDATION={1}&quot;,
                  HttpUtility.UrlEncode(viewState),
                  HttpUtility.UrlEncode(eventValidation));
webRequest = (HttpWebRequest)WebRequest.Create(&quot;[WEB SAYFASININ ADRESI]&quot;);
webRequest.Method = &quot;POST&quot;;
webRequest.ContentType = &quot;application/x-www-form-urlencoded&quot;;
webRequest.ContentLength = tampon.Length;
webRequest.Proxy = new WebProxy((string)null, true);
webRequest.CookieContainer = new CookieContainer();
using (var istekStream = webRequest.GetRequestStream()) {
   istekStream.Write(tampon, 0, tampon.Length);
}
var yanit = (HttpWebResponse)webRequest.GetResponse();
var yanitIcerigi = string.Empty;
using (var responseStream = yanit.GetResponseStream()) {
   var streamReader = new StreamReader(responseStream);
   yanitIcerigi = streamReader.ReadToEnd();
}</pre><p>Yukarıda yer alan C# kodu yardımıyla bir asp.net sayfasına veri gönderebiliyor olsakta, tam bir etkileşim yapabilmek için (örneğin bir butona basılması) takip etmemiz gereken bir kaç adım daha bulunmakta.</p><p>Asp.Net web sayfaları, form üzerindeki bir butona basılması gibi, olay geri bildirimlerini sayfa içerisinde tanımlı olan <em>__doPostBack</em> javascript metodunu kullanarak yapmaktadır. Bu javascript metodunun kodunu inceleyecek olursak;</p><pre class="brush: jscript; title: ; notranslate">function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}</pre><p>__doPostBack metodu <em>eventTarget</em> ve <em>eventArgument</em> adıyla iki parametre kabul etmekte. Bu parametrelerden eventTarget parametresi tetikleyici form bileşenini belirtirken (örneğin; butona basıldı ise basılan butonun adı), eventArgument parametresi olay argumanlarını belirtmektedir. Bu parametreler metod içerisinde sırasıyla __EVENTTARGET ve __EVENTARGUMENT form alanlarına atanmakta, ardından da form’un sunucuya gönderimi yapılmakta.</p><p>Kod içerisinden __EVENTTARGET parametresine geçmemiz gereken değeri asp.net web sayfasını bir browserdan açarak görebiliriz. Sayfanın kaynak kodunu açarak tetikleyici bileşenin adını (örneğin bir tıklama olayı için tıklanacak butonun adı) kopyalanmalı.</p><p>Aşağıda şimdiye kadar anlattıklarımdan yola çıkarak Visual Studio 2010 ASP.Net Web Application şablonu ile oluşturulmuş bir web uygulamasına veri göndererek sisteme girişi sağlayan örnek bir uygulama kodunu bulabilirsiniz.</p><pre class="brush: csharp; title: ; notranslate">var ilkSayfaIcerigi = IlkIstek(&quot;http://localhost:35836/Account/Login.aspx&quot;);
var viewState = AlanDegeriniBul(ilkSayfaIcerigi, &quot;__VIEWSTATE&quot;);
var eventValidation = AlanDegeriniBul(ilkSayfaIcerigi, &quot;__EVENTVALIDATION&quot;);
var gonderilecekVeri = string.Format(&quot;{0}={1}&quot;,
     HttpUtility.UrlEncode(&quot;ctl00$MainContent$LoginUser$UserName&quot;),
     HttpUtility.UrlEncode(&quot;KULLANICI ADI&quot;));
gonderilecekVeri += string.Format(&quot;&amp;{0}={1}&quot;,
     HttpUtility.UrlEncode(&quot;ctl00$MainContent$LoginUser$Password&quot;),
     HttpUtility.UrlEncode(&quot;KULLANICI ŞİFRESİ&quot;));
gonderilecekVeri += string.Format(&quot;&amp;{0}={1}&quot;,
     HttpUtility.UrlEncode(&quot;__EVENTTARGET&quot;),
     HttpUtility.UrlEncode(&quot;ctl00$MainContent$LoginUser$LoginButton&quot;));
gonderilecekVeri += string.Format(&quot;&amp;{0}={1}&quot;,
     HttpUtility.UrlEncode(&quot;__EVENTARGUMENT&quot;),
     HttpUtility.UrlEncode(string.Empty));
gonderilecekVeri += string.Format(&quot;&amp;{0}={1}&quot;,
     HttpUtility.UrlEncode(&quot;__VIEWSTATE&quot;),
     HttpUtility.UrlEncode(viewState));
gonderilecekVeri += string.Format(&quot;&amp;{0}={1}&quot;,
     HttpUtility.UrlEncode(&quot;__EVENTVALIDATION&quot;),
     HttpUtility.UrlEncode(eventValidation));
var tampon = Encoding.UTF8.GetBytes(gonderilecekVeri);
webRequest = (HttpWebRequest)WebRequest.Create(&quot;http://localhost:35836/Account/Login.aspx&quot;);
webRequest.Method = &quot;POST&quot;;
webRequest.ContentType = &quot;application/x-www-form-urlencoded&quot;;
webRequest.ContentLength = tampon.Length;
webRequest.Proxy = new WebProxy((string)null, true);
webRequest.CookieContainer = new CookieContainer();
using (var istekStream = webRequest.GetRequestStream()) {
   istekStream.Write(tampon, 0, tampon.Length);
}
var yanit = (HttpWebResponse)webRequest.GetResponse();
var yanitIcerigi = string.Empty;
using (var responseStream = yanit.GetResponseStream()) {
   var streamReader = new StreamReader(responseStream);
   yanitIcerigi = streamReader.ReadToEnd();
}</pre><p><em>Bu örnek veri gönderim kodu, içeriği hiç değiştirilmemiş ve 35836 portundan hizmet veren bir ASP.Net Web Application için hazırlanmıştır.</em></p><table
width="100%" border="0" cellpadding="0" cellspacing="7" class="postUpdate"><tbody><tr><td
valign="top"><img
style="background-image: none; border-right-width: 0px; margin: 0px 0px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Info" border="0" alt="Info" src="http://www.enterprisecoding.com/blog/wp-content/uploads/2010/11/Info.png" width="32" height="32" /></td><td
valign="top"><p
align="justify">&#160;&#160; <strong>Güncelleme, 03 Şubat 2012 :</strong> Bu konu hakkında aldığım yoğun ısrarlar sonrasında bir webiner düzenlemeye karar verdim. NedirTv.com çatısı altında <strong>27 Şubat 2012</strong> Pazartesi günü saat <strong>21:00</strong>&#8216;da düzenlenecek olan bu webiner&#8217;e başlamasından yarım saat öncesinden itibaren <a
href="https://www.livemeeting.com/cc/mvp/join?id=68WBPH&#038;role=attend" target="_blank">https://www.livemeeting.com/cc/mvp/join?id=68WBPH&#038;role=attend</a> adresinden katılabilirsiniz.</p></td></tr></tbody></table><p><br/></p><p>Related posts:<ol><li><a
href='http://www.enterprisecoding.com/blog/post/c-programsal-olarak-appfabric-cache-host-bilgisine-erismek' rel='bookmark' title='C# Programsal Olarak AppFabric Cache Host Bilgisine Erişmek'>C# Programsal Olarak AppFabric Cache Host Bilgisine Erişmek</a></li><li><a
href='http://www.enterprisecoding.com/blog/post/tip-powershell-oturumu-sistem-yoneticisi-olarak-mi-baslatilmis' rel='bookmark' title='Tip : PowerShell Oturumu Sistem Yöneticisi Olarak Mı Başlatılmış?'>Tip : PowerShell Oturumu Sistem Yöneticisi Olarak Mı Başlatılmış?</a></li></ol></p>]]></content:encoded> <wfw:commentRss>http://www.enterprisecoding.com/blog/post/programsal-olarak-bir-asp-net-sayfasina-veri-gondermek/feed</wfw:commentRss> <slash:comments>14</slash:comments> </item> </channel> </rss>
