VS2005 AspNet web projelerini debug etmiyor

Merhaba,

Geçenlerde eski projelerden birine bakmam gerekti. VS2005 ile yazılmıştı ve ufak bir düzeltme gerekiyordu. Projeyi açabiliyorum ancak internet explorer ile açılış sayfası açılır açılmaz debug stop oluyordu, dolayısıyla breakpoint vs. hak getire:)

Neyse ufak bir araştırma sonucu düzelttim. Tek yapmam gereken şey IIS içinde projenin virtual directorysini bulup asp debugging özelliğini enable etmek oldu. Gerçi normalde böyle bir işlem yapmaya gerek yok ama olur da aynı problemi yaşarsanız aşağıdaki adımları uygulamanız gerekiyor.

  1. IIS üzerinde virtual directory özelliklerine girin
  2. Virtual Directory tabı altındaki Configuration butonuna tıklayın
  3. Debugging Tabına tıklayın
  4. Enable ASP server-side script debugging ve Enable ASP client-side script debugging checkboxlarını checkleyin
  5. Tamam deyip nolur ne olmaz IIS i restart edin.
  6. bu kadar! Umarım işinize yarar...

VS2008 - Debug / Release menüsünü geri getirme

Merhaba,

Geçenlerde bilgisayarımda genel bir temizlik yaptım, hatta temizlik demek biraz hafif kalır komple format attım. Ne de olsa hformat hastalığı var bende:)
Neyse sıra geldi VS2008'i ilk kez çalıştrımaya; normalde ilk kez açıldığında hangi ayarları kullanmak istersiniz diye bir pencere çıkar karşıma ve ben C# gördüğüm yeri işaretlerdim. Bu sefer değişiklik olsun diye web development setting i seçtim, seçmez olaydım. Projeyi Release modda build etmek için ordan gir buradan çık uğraş dur. Halbuki sevimli bir pencerem vardı bunu yapmak için. 

. İşte bunu bir türlü geri getiremiyordum.

Sonunda Tools içinde "Import and Export Settings..." diye bir seçeneği farkettim. Tıklar tıklamaz Reset All Settings yazısını gördüm ve denedim. O malum ilk ekran tekrar karşıma geldi ve bu sefer C# görünüm ayarlarını seçtim. Ne kadar da alışmışım bu haline :) 

LINQ ile stored procedure den gelen değeri (SCOPE_IDENTITY) almak

  • Merhaba,
    Öncelikle yazıyı özensiz şekilde hazırladığım için kusura bakmayın. Boş vakit bulduğumda (tabi bulabilirsem) düzenlemeye çalışacağım.,

LINQ ile çalışırken bir tabloya insert eden prosedürden gelen SCOPE_IDENTITY() verisini almak umduğumdan biraz daha karmaşıkmış. Aşağıda basit bir şekilde anlatmaya çalışacağım.

1-)Prosedürümüzü ID gönderecek şekilde düzenleyelim

Sadece OID ve Name alanı bulunan source adında bir tablomuz olsun. Bunun insert'i için yazacağımız prosedür aşağıdaki gibi olmalı

ALTER procedure [dbo].[TR_InsertSource]
@OID int OUTPUT,
@Name nvarchar(255)
AS
insert into source
( [Name] )
VALUES
( @Name )

set @ID= cast(SCOPE_IDENTITY() AS INT)

2-)Prosedürümüzü ve ilgili tabloyu DBML'e ekleyelim

bu kısım için detaylı açıklamayı vakit bulursam ekleyeceğim :(

3-)insert işlemi yapılacak tablo için Dbml deki değişikliklerimizi yapalım

  • Aşağıda gördüğünüz gibi DBML dosyası üzerinde insert yapılacak tabloyu tıklıyoruz 
  • Properties menüsünden insert alnına tıklıyoruz (use Runtime üzerine)

  • aşağıdaki gibi bir pencere açılacaktır

  • Burada Customize radiobutton unu seçiyoruz
  • çıkan dropdowndan stored procedure mizi seçiyoruz (benim kullandığım TR_InsertSource)
  • oiD olarak tanımladığımız alanın karşısında identity alan adımızın olduğundan emin olalım (OID)
  • sonra da OK butonuna basalım
  • Properties penceresi aşağıdaki gibi olacaktır:
  • 3-)Kodumuzu güncelleyelim

    • öncelikle yeni OID değerini tutacak bir değişken yaratalım:
    int? sourceID = 0;
    
    • şimdi prosedürü çalıştıracak kodu yazalım:

    MDDBDataContext dc = new MDDBDataContext();

    dc.TR_InsertSource(ref sourceID, txtName.Text)

    prosedürün içine yazdığımız ref sourceID sayesinde yukarda integer olarak tanımladığımız sourceID alanına yeni OID değeri kaydedilecektir.
    
    • şimdi de prosedürü çalıştıralım

    dc.SubmitChanges();

    kodun son hali aşağıdaki gibi olacaktır :

    int? sourceID = 0;
    MDDBDataContext dc = new MDDBDataContext();
    dc.TR_InsertSource(ref sourceID, txtName.Text)
    dc.SubmitChanges();

    artık sourceID'yi istediğiniz gibi kullanabilirsiniz.
    
    Umarım işinize yarar...
    

    Url Rewriting

            Sanırım web de dolaşırken siz de çok kez ismini duymuş ya da farklı farklı sitelerde uygulamalarını görmüşsünüzdür. Eğer neden sitenizde urlrewriting olması gerektiğini ve sitenize nasıl uygulayabileceğinizi merak ediyorsanız tam yerine geldiniz.

     

    Sağladıkları:

    1. Sitenizin arama motorları tarafından daha detaylı indexlenir
    2. Lamerlerin querystringlerinizle oynayıp bir şeyleri karıştırmasını engeller
    3. Kullanıcıya daha hoş görünen bir adrese sahip olursunuz


           Normalde sitemizde bir makale yayınladığımız zaman adresi:

                     www.recepguzel.com/?articleID=1234 gibi olur.

           Url Rewriting sonrasında ise:

                     www.recepguzel.com/1234/Url-Rewriting-Nedir gibi bir adrese sahip olabiliriz.

            Özelliklerinden kısaca bahsetmeye çalıştıktan sonra şimdi de nasıl yapabileceğimize bakalım.

             Aslında işlem temelde 3 aşamadan oluşuyor:

       1-)IIS tarafındaki değişiklikler(Windows XP Pro için)

            IIS tarafında yapacağımız ufacık bir işlem yeterli olacaktır

    • IIS’i açıyoruz ve url rewriting özelliği eklemek istediğimiz website/vdirectory üzerine sağ tıklayıp properties(özellikler)’e tıklıyoruz
    • Virtual Directory/Web site tabı içerisinde Configuration düğmesine tıklıyoruz
    • Karşımıza aşağıdaki gibi bir ekran gelecek, burada Add butonuna tıklıyoruz
    • Açılan ekrandaki browse butonuna basıp “aspnet_isapi.dll” dosyasını buluyoruz.

      Genellikle bu adreste bulunur: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll
    • Extension alanına “.*” yazıyoruz.
    • Limit to alanına “GET,HEAD,POST” yazıyoruz.
    • Son olarak da Check that file exist checkboxunun seçimini kaldırıyoruz.
    • Çıkan diğer ekranlara OK OK diyerek işin iis fazını bitirmiş oluyoruz.

    Not: Windows server 2003 üzerinde Virtual Directory üzerinde Configuration üzerine tıkladığımızda farklı bir ekran gelir.

    Çıkan ekranda Application extentions yerine Wildcard application maps altındaki insert butonuna tıklamanız gerekmektedir.

    Burada yine xp'de olduğu gibi aspnet_isapi.dll'i browse edip, Verify that file exist kutucuğunun checkini kaldırıyoruz ve OK ile işlemi kaydediyoruz.

         2-)Web.config de yapılması gereken değişiklikler :

            Aşağıdaki satırları web.config içersinde gerekli yerlere yapıştırıyoruz

                 a.) <configSections> tagları arasına aşağıdaki kodu yapıştıryoruz:

    <section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter"/> 

                 b.) <httpModules>  tagları arasına aşağıdaki kodu yapıştırıyoruz:

    <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>

                 c.) <system.webServer> tagları arasına aşağıdaki kodu yapıştırıyoruz:

    <modules runAllManagedModulesForAllRequests="true">
    <
    add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule" /> </modules>
    <!--[if !supportLineBreakNewLine]-->
    <!--[endif]-->
                 Eğer yoksa Aşağıdaki kodu da aynı blok içine yazıyoruz:          

    <!--[if !supportLists]-->
    <validation validateIntegratedModeConfiguration="false" />

     

                 d.)Son olarak <configuration> tagı içine aşağıdaki kodu yapıştırıyoruz:

    <rewriter>
    <
    rewrite url="/([0-9]{6})(.*)/(.*)-(.*)" to="~/ArticleDetail/default.aspx?aid=$1"/>
    </
    rewriter>
    <!--[if !supportLineBreakNewLine]--><!--[endif]-->

                 Not:Burada benim makale gösterdiğim sayfam ArticleDetail klasörü içinde default.aspx olduğu için bu şekilde edit ettim, siz kendi sitenize göre değiştirebilirsiniz). Ayrıca rewriter url içine yazdığım ([0-9]{6}) regex komutunu yalnızca 6 karakterli rakamlarla sınırlamak için kullandım. siz kodunuzda  bu kısmı kaldırabilirsiz. Şu an ki hali "/123456/merhaba-dunya" şeklindeki formata göre yazılmıştır.

      3-) Classımızda yapılacak değişiklikler

                 Class da bir değişiklik yapmadan önce referanslarımız arasına “Intelligencia.UrlRewriter.dll” dosyasını eklememiz gerekiyor. Sonra aşağıdaki fonksiyonu makaleye link verdiğimiz yani; makaleleri listelediğimiz sayfanın class ı içine kopyalıyoruz(bunu ayrı bir helper class ına da atabilirsiniz)

    C# kodu: 

    public static string GenerateURL(object Title, object strId)

            {

                //Article’ın konusu

                string strTitle = Title.ToString();

                 #region Generate SEO Friendly URL based on Title

                //boşlukları trimleyelim.

                strTitle = strTitle.Trim();

                strTitle = strTitle.Trim('-');

                strTitle = strTitle.ToLower();

                char[] chars = @"$%#@!*?;:~`+=()[]{}|\'<>,/^&"".".ToCharArray();

                strTitle = strTitle.Replace("c#", "C-Sharp");

                strTitle = strTitle.Replace("vb.net", "VB-Net");

                strTitle = strTitle.Replace("asp.net", "Asp-Net");

                 //noktaları da “-“ karakteri ile değiştirelim

                strTitle = strTitle.Replace(".", "-");

                 //Lüzumsuz karakterleri de bi güzel çevirelim

                for (int i = 0; i < chars.Length; i++)

                {

                    string strChar = chars.GetValue(i).ToString();

                    if (strTitle.Contains(strChar))

                    {

                        strTitle = strTitle.Replace(strChar, string.Empty);

                    }

                }

                 //Sıra geldi aradaki boşluklara, onları da “-“ yapalım

                strTitle = strTitle.Replace(" ", "-");

                 //Yanyana gelen “-“lerden de kurtuluyoruz

                strTitle = strTitle.Replace("--", "-");

                strTitle = strTitle.Replace("---", "-");

                strTitle = strTitle.Replace("----", "-");

                strTitle = strTitle.Replace("-----", "-");

                strTitle = strTitle.Replace("----", "-");

                strTitle = strTitle.Replace("---", "-");

                strTitle = strTitle.Replace("--", "-");

                 strTitle = strTitle.Trim();

                 //Halâ “-“ var mı acaba?

                strTitle = strTitle.Trim('-');

                #endregion

                 //Şimdi de linki istediğimiz şekle çeviriyoruz

                strTitle = "~/Article/" + strTitle + "-" + strId + ".aspx";

                 return strTitle;

    }

    VB.NET Kodu:

    Public Shared Function GenerateURL(ByVal Title As Object, ByVal strId As Object) As String
       
       
        'Article’ın konusu
       
        Dim strTitle As String = Title.ToString()
       
        '#Region "Generate SEO Friendly URL based on Title"
       
        'boşlukları trimleyelim.
       
        strTitle = strTitle.Trim()
       
       
        strTitle = strTitle.Trim("-"c)
       
       
        strTitle = strTitle.ToLower()
       
        Dim chars As Char() = "$%#@!*?;:~`+=()[]{}|\'<>,/^&"".".ToCharArray()
       
        strTitle = strTitle.Replace("c#", "C-Sharp")
       
        strTitle = strTitle.Replace("vb.net", "VB-Net")
       
        strTitle = strTitle.Replace("asp.net", "Asp-Net")
       
        'noktaları da “-“ karakteri ile değiştirelim
       
        strTitle = strTitle.Replace(".", "-")
       
        'Lüzumsuz karakterleri de bi güzel çevirelim
       
        For i As Integer = 0 To chars.Length - 1
           
           
            Dim strChar As String = chars.GetValue(i).ToString()
           
            If strTitle.Contains(strChar) Then
               
               
                   
                strTitle = strTitle.Replace(strChar, String.Empty)
               
            End If
        Next
       
        'Sıra geldi aradaki boşluklara, onları da “-“ yapalım
       
        strTitle = strTitle.Replace(" ", "-")
       
        'Yanyana gelen “-“lerden de kurtuluyoruz
       
        strTitle = strTitle.Replace("--", "-")
       
        strTitle = strTitle.Replace("---", "-")
       
        strTitle = strTitle.Replace("----", "-")
       
        strTitle = strTitle.Replace("-----", "-")
       
        strTitle = strTitle.Replace("----", "-")
       
        strTitle = strTitle.Replace("---", "-")
       
        strTitle = strTitle.Replace("--", "-")
       
        strTitle = strTitle.Trim()
       
        'Halâ “-“ var mı acaba?
       
        strTitle = strTitle.Trim("-"c)
       
        '#End Region
       
        'Şimdi de linki istediğimiz şekle çeviriyoruz
       
        strTitle = ("~/Article/" & strTitle & "-") + strId & ".aspx"
       
        Return strTitle
    End Function

                    Kod bloğumuzu da kopyaladıktan sonra artık link vermeye hazırız.

     

                   Normalde bu şekilde vermemiz gereken linki:

                string url =”articledetail.aspx?ArticleId=1234”;

         bu şekilde veriyoruz :

                string url =GenerateURL(Title,ArticleId).ToString());

    Not: Orijinal urlrewriter dosyasını kullandığımda aşağıdaki problemi yaşadığım için dll'i googlebot hatasına karşı editledim. isterseniz editlenmiş halini sayfanın sonundaki linkten indirebilirsiniz.

    Exception type: HttpException
    Exception message: Cannot use a leading .. to exit above the top directory.

      Intelligencia.UrlRewriter.rar (18,15 kb)