11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

iena ha scritto:

mi dà fastidio dover mettere mano a del codice funzionante solo perché non riesco a trovare la configurazione corretta per il server

Hai ragione, cerchiamo di trovare la configurazione giusta.
Da come descrivi il problema, penso che il modulo di routing non stia andando in esecuzione.

L'altro giorno non ti ho detto come configurarlo ma era importante saperlo perché da IIS7 i moduli vanno aggiunti nel nodo system.webServer/modules, e non più in system.web/httpModules.

Segui questo articolo che ti indica esattamente come configurare il routing per ASP.NET 3.5
http://www.mindstick.com/Articles/9992a0bc-90f5-4f04-823a-31f901b61643/

iena ha scritto:

a. Se accedo dal server al sito di vede che l'handler che restituisce l'errore è lo "StaticFile handler" e non la ISAPI che dovrebbe gestire TUTTI i processi che passano...

Dunque... lasciami fare una precisazione su moduli e gestori, vorrei evitare che spendessi del tempo a fare delle modifiche che non risolverebbero il problema. Se non sono chiaro fammelo sapere.

Un modulo, come quello di routing, va in esecuzione per qualsiasi richiesta web. Si inserisce in una o più delle numerose fasi nella pipeline di IIS per compiere delle operazioni (spesso trasversali) come logging, autorizzazione, recupero della sessione, e così via.

Il modulo di routing, in particolare, ha lo scopo di pre-selezionare un gestore durante la fase "Map Handler", anticipando così IIS in quella scelta. Una richiesta che IIS avrebbe affidato al gestore StaticFile, viene così "dirottata" verso una pagina ASP.NET.

Quindi comprendi che se la richiesta finisce al gestore StaticFile, vuol dire che il modulo di routing non ha avuto l'opportunità di fare quella pre-selezione. Configurandolo nel modo in cui ti suggerivo sopra, dovresti riuscire a risolvere il problema.

ciao,
Moreno
Modificato da BrightSoul il 10 agosto 2013 16.41 -

Enjoy learning and just keep making
331 messaggi dal 06 maggio 2003
Ho fatto tutto come da innumerevoli guide che si trovano online e come mi hai suggerito... Non funziona, sempre il maledetto errore 404 :-(

Comincio a pensare che il VPS di Aruba abbia qualche limitazione.
331 messaggi dal 06 maggio 2003
Ho notato che se registro l'assembly nel web.config


<assemblies>
        <add assembly="System.Web.Routing"/>
</assemblies>



Devo anche pubblicarla nella cartella bin della soluzione, altrimenti non la trova.

In ogni caso poi non funziona il routing ...
11.886 messaggi dal 09 febbraio 2002
Contributi
Mmmh, che situazione ostica.


Comincio a pensare che il VPS di Aruba abbia qualche limitazione

Non so, immagino che abbiano fatto un'installazione standard di Windows Server; continuo a pensare che ci sia qualcosa nella configurazione che ci sfugge.

Senti, se hai tempo per continuare a ricercare le cause del problema vorrei farti fare un test, giusto per confermare se i moduli vanno in esecuzione oppure no. Almeno avremo delle informazioni in più per fare altre ipotesi.

Non toccare il sito che hai già nel server, creane un altro vuoto. Mettilo in binding su un'altra porta, tipo la 8080 su localhost, oppure quella che preferisci. Come al solito assicurati che il suo application pool sia in modalità integrata.
Adesso aggiungi al sito questo esatto contenuto nel web.config. Per questo test non c'è bisogno di altro.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <add name="modulo" type="Modulo" />
    </modules>
  </system.webServer>
</configuration>

Adesso crea nel sito la cartella App_Code e inserisci lì dentro un file Modulo.cs così fatto:
using System;
using System.Web;
using System.IO;

public class Modulo : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.BeginRequest += context_BeginRequest;
    }

    void context_BeginRequest(object sender, EventArgs e)
    {
       File.AppendAllText(
            HttpContext.Current.Server.MapPath("~/logmodulo.txt"),
            string.Format("\r\n{0}\t{1}", DateTime.Now.ToString(), HttpContext.Current.Request.Url.ToString())
            );
    }

    public void Dispose()
    {
    }
}


Adesso, dal server stesso, apri Internet Explorer e visita il sito al suo indirizzo http://localhost:8080/
Poi prova anche altri URL a caso, tipo http://localhost:8080/miotest o http://localhost:8080/abc/123
Non ha importanza se vedi degli errori 404 perché il modulo deve comunque andare in esecuzione a causa del runAllManagedModulesForAllRequests="true" che è nel web.config.

Se il test ha avuto successo, vedrai apparire il file logmodulo.txt nella cartella del sito. In esso troverai elencate tutte le richieste che hai fatto a localhost:8080, anche se il loro esito è stato un 404.

ciao,
Moreno
Modificato da BrightSoul il 12 agosto 2013 12.40 -

Enjoy learning and just keep making
331 messaggi dal 06 maggio 2003
Indipendentemente dal risultato non ti ringrazierò mai abbastanza. Sei estremamente gentile a seguirmi :-)


Veniamo a noi.

Ho fatto il test che mi hai chiesto di fare e il modulo aggiuntivo funziona alla grande!

Unica cosa: io nel sito che non funziona non ho una cartella App_Code, ho tutto il codice in una cartella con una sigla inventata... Può inficiare il funzionamento una volta online?
331 messaggi dal 06 maggio 2003
Ho fatto la prova di aggiungere la riga di codice che va a scrivere sul file all'interno del mio RouteHandler e non viene scritto nulla né tantomeno il file viene creato ... Quindi da lì proprio non ci passa. Ho anche provato a spostare il tutto nella cartella App_Code ma non è cambiato nulla.
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao, ti ringrazio :)

iena ha scritto:

Unica cosa: io nel sito che non funziona non ho una cartella App_Code,

E' normale perché il tuo è un progetto di tipo Applicazione web mentre la cartella App_Code è usata solo nei Siti web. Qui trovi un riepilogo delle differenze.

Quella più sostanziale è che le applicazioni web hanno bisogno di essere compilate, cioè non dovresti copiare nel server il codice sorgente tale e quale come ce l'hai in locale, ma dovresti usare la funzionalità di pubblicazione che ti offre Visual Studio e che prevede - per l'appunto - la compilazione dei sorgenti.

Dunque procedi così: se per te non è un problema, rimuovi dal server i file del sito che non funziona. Adesso, da Visual Studio clicca il menu Build -> Publish, come vedi in questa immagine.

Si aprirà un wizard in cui dovrai creare un profilo di pubblicazione (si tratta di inserire i dati di accesso FTP al server). Al termine della procedura avrai un tasto Publish che causerà il trasferimento nel server dei soli file necessari al funzionamento dell'applicazione.

Terminata la pubblicazione, prova a vedere se il routing funziona.

iena ha scritto:

Ho fatto la prova di aggiungere la riga di codice che va a scrivere sul file all'interno del mio RouteHandler e non viene scritto nulla né tantomeno il file viene creato .

Però è strano perché se il modulo è stato configurato correttamente nel nodo system.webServer/modules possono succedere solo due cose:
  • Il modulo funziona
  • Il modulo non funziona ma a quel punto hai un'eccezione che ti avvisa che il modulo non può essere trovato


ciao,
Moreno

Enjoy learning and just keep making
331 messaggi dal 06 maggio 2003
BrightSoul ha scritto:

Dunque procedi così: se per te non è un problema, rimuovi dal server i file del sito che non funziona. Adesso, da Visual Studio clicca il menu Build -> Publish, come vedi in questa immagine.

Si aprirà un wizard in cui dovrai creare un profilo di pubblicazione (si tratta di inserire i dati di accesso FTP al server). Al termine della procedura avrai un tasto Publish che causerà il trasferimento nel server dei soli file necessari al funzionamento dell'applicazione.

Terminata la pubblicazione, prova a vedere se il routing funziona.


Certo, è la normale procedura della pubblicazione del sito web. L'unica differenza con quello che faccio io è che invece che pubblicare direttamente sul server pubblico in locale per poi caricare il tutto sul server con FileZilla, questo solo per un discorso di praticità e di abitudine in quanto spesso mi capita di caricare solo il file .dll del compilato



Ho provato a fare scrivere un file anche alla funzione RegisterRoute() che ho creato nel Global.asax e... Sorpresa! Non scrive nulla ... Quindi ipotizzo che neanche le route vengano create.


 protected void Application_Start(object sender, EventArgs e)
    {
        // Code that runs on application startup
        RegisterRoute();
    }

    void RegisterRoute()
    {
        RouteTable.Routes.Add("Contacts", new System.Web.Routing.Route("{language}/Contacts", new RouteHandler("~/Contact.aspx")));
        RouteTable.Routes.Add("Home", new System.Web.Routing.Route("{language}/Home", new RouteHandler("~/Default.aspx")));
        RouteTable.Routes.Add("Gallery", new System.Web.Routing.Route("{language}/Gallery", new RouteHandler("~/Gallery.aspx")));
        RouteTable.Routes.Add("Prices", new System.Web.Routing.Route("{language}/Prices", new RouteHandler("~/Prices.aspx")));
        RouteTable.Routes.Add("Where", new System.Web.Routing.Route("{language}/Where", new RouteHandler("~/Where.aspx")));

        File.AppendAllText(
            HttpContext.Current.Server.MapPath("~/public/logmodulo.txt"),
            string.Format("\r\n{0}\t{1} - RegisterRoute", DateTime.Now.ToString(), HttpContext.Current.Request.Url.ToString())
            );
    }


Devo avere cannato qualcosa da qualche altra parte a sto punto ...

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.