Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

SharePoint, customErrors & 404 error pages

Îåêßíçóå áðü ôï ìÝëïò rousso. Τελευταία δημοσίευση από το μέλος rousso στις 17-08-2005, 07:10. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  11-08-2005, 12:05 4167

    SharePoint, customErrors & 404 error pages

    Καλημέρα,

    αφού ξόδεψα πάνω από 6 ώρες googling arround και αφού δοκίμασα όλα όσα ήξερα κα μπόρεσα να μάθω σε αυτό το χρονικό διάστημα, έχω αρχίσει να απελπίζομαι και αποφάσισα να μοιραστώ το πρόβλημά μου μαζί σας.

    Το πρόβλημα:

    Έχω ένα SharePoint (WSS) site. Όλα καλά.

    Θέλω να "πιάνω" τα client errors του IIS και ειδικά το 404 (File not found). Δηλάδή όταν κάποιος χρήστης ζητήσει μια σελίδα που δεν υπάρχει, θέλω να παίρνει ένα custom 404 error page. Απλό ακούγεται... Αλλά δεν είναι... Έχω αρχίσει δε  να φοβάμαι ότι μπορεί και να μην γίνεται...

    Πιο συγκεκριμένα:

    Οι λύσεις που δοκίμασα:

    Στον Internet Information Services Manager πήγα στο site μου, right-clik, Properties, Custom Errors tab, και άλλαξα τα default settings για το 404, 404.2 και 404.3 errors σε URL που δείχνει μέσα στο site μου ("/404.aspx"). Ήμουνα βέβαιος ότι θα δούλευε.. Κι όμως... ούτε που συγκινήθηκε καθόλου ο server και μου έστελνε το ίδιο default error page.

    Λέω μετά "ας πάω και στο web.config"... Πάω λοιπόν και στο customErrors section προσθέτω ένα  <customErrors mode="On" ><error statusCode="404" redirect="~/404.aspx" /></customErrors > ως ήτο αναμενενόμενο. Λέω λοιπόν: "για να δούμε;".... Καμία συγκίνιση! Το ίδιο default 404 error page.

    Με λίγη παρατηρητικότητα πρόσεξα ότι το default error page που έβλεπα έμοιαζε αλλά δεν ήταν ακριβώς το ίδο με το default error page του IIS6 μου (το οποίο βρίσκεται στο path C:\WINDOWS\help\iisHelp\common\). Αντιθέτως το error page που έπαιρνα (με λίγη ακόμα παρατηρητικότα) εντόπισα ότι ήταν στο res://C:WINNT\system32\shdoclc.dll/http_404.htm.... Οπότε λέω... "Αυτό είναι IE specific! Για να δούμε τι λέει και το Netscape;" Και το Netscape έλεγε: "404 NOT FOUND", και σε View/Page Source... ακριβώς το ίδιο (σκέτο text "404 NOT FOUND"). Μολίς το βλέπει αυτό ο IE σε πάει στο "friendly error message" του (το οποίο παρεπιτόντως είχα τσεκαρισμένο στο Tools/Internet Options/Advanced)... 

    Ποιός το βάζει λοιπόν αυτό το "404 NOT FOUND" εκεί; Στον IIS έχω πει να χρησιμοποιεί δικιά μου σελίδα για το 404. Στην ASP.NET μέσα στο web.config μου έχω κάνει το ίδιο... Οπότε λέω "oops! Κάτι άλλο μπαίνει στη μέση! Τι άλλο; Το πρώτο πράγμα που σκέφτηκα ήταν WSS ISAPI!"

    Άρα το πρόβλημα, στη φάση αυτή, εντοπίστηκε στο πως θα παρακάμψω το WSS ISAPI ή πως θα το ξεγελάσω ή πως εν πάσει περιπτώσει θα το βάλω να κάνει αυτό που θέλω..

    Για να το παρακάμψω ένας καλός τρόπος ήταν να γράψω εγώ ένα ISAPI filter που θα προσθέσω στο site και θα κάνω τη δουλειά μου πριν το πάρει χαμπάρι το WSS. Αυτό όμως δεν είναι η καλύτερη ιδέα και είπα να δω πρώτα αν μπορώ να πετύχω το στόχο μου με πιο απλό, γρήγορο και κομψό τρόπο...

    Για να κάνω και ένα cross-check ότι δεν είμαι σε λάθος δρόμο, πήγα και στο SharePoint Central Administration και έριξα μια ματιά στο Define Managed Paths. Εκεί (αφού πρώτα έφτιαξα ένα physical (as opposed to WSS) folder στο website μου όχι με FP 2003 αλλά με File Explorer μέσα στο physical root folder), πρόσθεσα ένα exclusion για το /test. Δοκίμασα λοιπόν ένα request του τύπου http://myserver/test/lalala και oops! Δουλεύει! Με έστειλε στο 404 error page που είχα ορίσει στο Custom Errors tab του IIS Manager. Μόνο που αυτό δουλεύει εφόσον το error page είναι σε unmanaged path. Αντίθετα το http://myserver/lalalala (που δεν υπάρχει) μου στέλενει πάραυτα το γνωστό "404 NOT FOUND" που προανέφερα...

    Το πρόβλημα φυσικά παραμένει οπότε συνεχίζονται και οι προσπάθειες...

     

    Λέω λοιπόν να πάω στο root του WSS site μου και να προσθέσω ένα global.asax (που δεν υπάρχει by default), να κάνω τη δουλειά μου...

    Βάζω λοιπόν το global.asax (χωρίς codebehind φυσικά) και γράφω:

    <%@ Application  language="C#" %>
    <script runat="server">

       virtual protected void Application_BeginRequest(Object sender, EventArgs e)
       {
          Response.Write("begin request caught");
       }

       virtual protected void Application_EndRequest(Object sender, EventArgs e)
       {
          Response.Write("end request caught");
       }
    </script>

    Και φυσικά βλέπω στην αρχή και το τέλος κάθε σελίδας τα δύο μηνυματάκια που έβαλα στο global.asax οπότε λέω "we are in business"...

    To τροποποιώ λοιπόν (το global.asax) ως εξής:

    <%@ Application  language="C#" %>
    <script runat="server">

       virtual protected void Application_EndRequest(Object sender, EventArgs e)
       {
          if (Response.StatusCode == 404)
          {
             Response.Clear(); 
             // δεν μπορώ να κάνω Response.Redirect εδω, ούτε Server.Transfer, οπότε...
             Response.Write(String.Format("<html><head><script>self.location='/404.aspx';<{0}script></head><body></body></html>", "/"));

          }
      }
    </script>

    Και τρέχω να δοκιμάσω! Ω! Ναι! δουλεύει! ΑΛΛΑ.... μόνο για .ASPX requests... Δηλαδή το http://myserver/aPageThatDoesNotExist.ASPX κάνει τελικά redirect στο error page μου όπως ήθελα και όπως τα είχα κανονίσει στο global.asax!

    ΑΛΛΑ... αν ζητήσεις http://myserver/aPageThatDoesNotExist.HTM .... ως αναμενόμενο... δεν πιάνει καθώς για τα htm δεν τρέχει το global.asax μια και δεν χειρίζεται αυτό τα requests...

    Τι κάνουμε λοιπόν;;;; Εμένα το πρόβλημά μου βρίσκεται στα .htm κυρίως!

    Προς το παρόν ακόμα ψάχνομαι...

    Καμιά καλή ιδέα κανείς;;;;;;

    rousso


    rousso
  •  16-08-2005, 19:01 4309 σε απάντηση της 4167

    Απ:SharePoint, customErrors & 404 error pages

    Επειδή με κάλυψες με όλα αυτά που σκέφτηκες, είπα να ψάξω και εγώ:

    Μήπως να έριχνες μια ματιά και στο registry για σχετικές παραμέτρους;


     


    Χρήστος Γεωργακόπουλος
  •  16-08-2005, 19:16 4310 σε απάντηση της 4309

    Απ:SharePoint, customErrors & 404 error pages

    Το ξέρω ότι είναι στο fpext.msg το οποίο δεν είναι editable...

    Το θέμα είναι πως θα πιάσω εγώ το 404 πριν το πιάσει το WSS (ή αφού το πιάσει αλλά πριν φύγει το response) χωρίς να γράψω δικό μου ISAPI filter....

    Smile [:)]

    thanks so far... θα δω τα links που μου στέλνεις στη συνέχεια μήπως έχει κάτι που δεν έχω προσέξει ως τώρα...

    thanks


    rousso
  •  17-08-2005, 07:10 4313 σε απάντηση της 4309

    Απ:SharePoint, customErrors & 404 error pages

    follow-up:

    Τα είδα... (τα είχα ξαναδεί κι όταν το έψαχνα...)

    Σε όλο το web τα 2-3 πιο σχετικά σημεία με το θέμα μου που βρήκα όσο το έψαχνα είναι:

    Μια ιδέα είναι να ρυθμίσω έτσι το site που όλα τα requests να τα περνάει από το ASP.NET framework... Δοκίμασα να το κάνω προσθέτοντας το .htm extension στα Application Mappings στον IIS Manager/Site/Properties/Home Directory/Configuration/Mappings αλλά δεν είδα προκοπή. (Κατάλαβες τι έκανα... Έκανα map τα .htm στο aspnet_isapi.dll). Με αγνόησε πλήρως... Τα mappings τα κάνει override με κάποιο τρόπο προφανώς το WSS ISAPI. Αυτό δεν αποκλείεται να ρυθμίζεται με κάποιο τρόπο στο registry αλλά δεν έχω δει πουθενά σχετικό hint προς το παρόν και δεν το έψαξα περισσότερο σε αυτή την κατεύθυνση..

    rousso


    rousso
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems