91 messaggi dal 27 ottobre 2009
Buongiorno,
la web application è in asp.net c#, Framework 4.0, server Aruba.
E' composta da due Master Page, una per l'area amministrativa e una per il front end, database SQL Server.

La compilazione va a buon fine e non vengono segnalati errori di programmazione. In locale con con il server di visual studio l'applicazione non si blocca.

Ci sono invece frequenti crash di IIS sul server. Pagina bloccata in continuo refresh. Questo succede solo navigando in area amministrativa e non con un link in particolare, ma in modo casuale.
Tutto il sito è bloccato è chiaramente non vengono restituiti codici di errore.

Si riesce a sbloccare nuovamente il sito, solo cambiando il nome al web.config installato nella cartella della suddetta area.

Questo il web.config:

<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<httpRuntime requestValidationMode="2.0" />
</system.web>
</configuration>


Aruba dice che probabilmente IIS va in crash perchè ci sono delle connessioni aperte.
Ho rivoluzionato allora completamente il codice, ma il problema rimane.

Ho pensato di passare a 3.5, ma prima di modificare di nuovo tutto il codice, chiedo una vostra opinione.

Grazie
98 messaggi dal 13 febbraio 2016
Prova a visualizzare una pagina vuota, solo con la masterpage nell'area riservata e vedi cosa succede.
Dovresti individuare cosa fa scatenare crash di IIS.
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
non dovresti andare a tentativi, bisognerebbe prima capire cosa sta succedendo e poi scegliere una soluzione appropriata.


Ci sono invece frequenti crash di IIS sul server.

Dovresti definire bene cosa intendi con "crash di IIS". Perché, se il processo w3wp.exe di IIS sta effettivamente crashando, potresti chiedere ad Aruba di dirti quali messaggi stanno apparendo nell'EventViewer del server Windows. Lì potrebbero esserci indizi importanti sulle cause del problema.
Se non riesci ad avere aiuto da loro, potresti aggiungere alla tua applicazione il pacchetto Elmah, che ti servirà a raccogliere automaticamente i testi delle eccezioni non gestite. Anche quelle saranno di estremo aiuto per capire il problema.
Ecco come installare e configurare Elmah.
http://www.codeproject.com/Articles/186237/Exception-logging-using-Elmah-Error-Logging-Module
E qui hai un articolo di Riccardo Golia che offre una visione d'insieme sulle tecnologie che puoi usare per scovare il problema.
http://www.aspitalia.com/articoli/asp.net/open-source-logging-p-3.aspx

Comunque, da come hai descritto il problema, io ho qualche dubbio che il worker process di IIS stia effettivamente crashando.

thedoors ha scritto:

Pagina bloccata in continuo refresh.

Se si fosse effettivamente verificato un crash, vedresti semplicemente una pagina di errore, e l'applicazione tornare online automaticamente dopo poco tempo.

Inoltre Aruba dice che probabilmente ci sono delle connessioni aperte. Questo non determina un crash, ma un problema molto più simile a quello che hai descritto (pagina che resta ferma sul caricamento molto a lungo).
Infatti, se non hai rilasciato gli oggetti connection invocando il loro metodo Dispose, il connection pool sarà costretto a darti una nuova connessione ogni volta che ti serve, andando ad incrementare un conteggio interno.
Quando questo conteggio arriva ad una certa soglia, l'applicazione è costretta a restare in attesa che qualche connessione in uso venga rilasciata. Se non invochi mai il Dispose, questa attesa può protrarsi molto a lungo, finché non si verifica un timeout ed appare il seguente errore (che non è un crash).
http://rani-irsan.blogspot.it/2014/12/aspnet-timeout-error-max-pool-size-was.html
Prova ad impostare questo nel tuo web.config, all'interno del nodo system.web
<customErrors mode="Off" />

...che servirà a mostrare gli errori di ASP.NET, anziché nasconderli.
Dopodiché riproduci il problema ma questa volta resta in attesa che succeda qualcosa. Alla fine dovrebbe uscire un errore se effettivamente il problema è quello delle connesioni.

ciao,
Moreno
Modificato da BrightSoul il 12 maggio 2016 20.03 -

Enjoy learning and just keep making
91 messaggi dal 27 ottobre 2009
Ciao e grazie per le risposte.

Sto facendo delle verifiche in locale, ma non ci significativi miglioramenti.
Premetto che sto facendo una simulazione estrema, richiamando le pagine molto velocemente, anche se questo non dovrebbe compromettere la visione del sito.

Ho impostato <customErrors mode="Off"> ma non è uscito nessun errore, quindi ho duvuto riavviare IIS.
Ho anche chiuso la connessione di una classe con Dispose(), ma non è servito. Le altre connessioni sono in Gridview e Repeater.

In Page_Load di quasi tutte le pagine dell'area amministrativa (ho chiuso le connessioni con Dispose()... sto testando):

 switch (Convert.ToInt16(Session["roleID"]))
        {
            case 0://SUPER ADMINISTRATOR

                /*DropDownList*/
                if (!IsPostBack)
                {
                    SqlDataSourceMenu.SelectCommand = "SELECT * FROM [Menu] ORDER BY menuID";
                    ddlTypeEdit.DataBind();
                }

                /*Gridview*/
                SqlDataSourcePages.SelectCommand = "SELECT * FROM [Content] WHERE Content.menuID =" + ddlTypeEdit.SelectedValue.ToString() + " ORDER BY Content.menuID";

                break;
            case 1://ADMINISTRATOR

                /*DropDownList*/
                if (!IsPostBack)
                {
                    SqlDataSourceMenu.SelectCommand = "SELECT * FROM [Menu] WHERE menuID IN (1, 4, 5, 6) ORDER BY menuID";
                    ddlTypeEdit.DataBind();
                }

                /*GridView*/
                SqlDataSourcePages.SelectCommand = "SELECT * FROM [Content] WHERE Content.menuID =" + ddlTypeEdit.SelectedValue.ToString() + " ORDER BY Content.menuID";
                GridViewPages.Columns[6].Visible = false;
                GridViewPages.Columns[7].Visible = false;

                break;
            case 2://GUEST

                /*DropDownList*/
                if (!IsPostBack)
                {
                    SqlDataSourceMenu.SelectCommand = "SELECT * FROM [Menu] WHERE menuID IN (4) ORDER BY menuID";
                    ddlTypeEdit.DataBind();
                }


                /*GridView*/
                SqlDataSourcePages.SelectCommand = "SELECT * FROM [Content] WHERE Content.menuID =" + ddlTypeEdit.SelectedValue.ToString() + " ORDER BY Content.menuID";
                GridViewPages.Columns[3].Visible = false;
                GridViewPages.Columns[5].Visible = false;
                GridViewPages.Columns[6].Visible = false;
                GridViewPages.Columns[7].Visible = false;

                break;

            default:

                break;
        }






e il web.config in front end:


<?xml version="1.0"?>

<configuration>
    <appSettings/>
    <connectionStrings>
        <add name="db_connection" connectionString="Data Source=localhost;database=xxxxx;Connection Timeout=0;Packet Size=4096;Integrated Security=no;User ID=xxxxx;Encrypt=no;pwd=xxxxx;" providerName="System.Data.SqlClient"/>
    </connectionStrings>
    <system.web>
        <customErrors mode="Off">
            <error statusCode="403" redirect="403.aspx"/>
            <error statusCode="404" redirect="404.aspx"/>
        </customErrors>
        <authentication mode="Forms">
            <forms loginUrl="Login.aspx" defaultUrl="Admin/Default.aspx">
                <credentials passwordFormat="MD5" />
            </forms>
        </authentication>
        <authorization>
            <allow users="*"/>
        </authorization>
        <compilation debug="true" defaultLanguage="c#" targetFramework="4.0">
            <assemblies>
                <add assembly="System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
                <add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
                <add assembly="System.Web.Extensions.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
                <add assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
                <add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
                <add assembly="System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
                <add assembly="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
                <add assembly="System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
                <add assembly="System.Web.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
            </assemblies>
        </compilation>
        <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
    </system.web>
    <system.web>
        <httpRuntime maxRequestLength="20000" />
    </system.web>
    <system.webServer>
        <httpErrors errorMode="Custom">
            <clear/>
            <error statusCode="403" prefixLanguageFilePath=""  path="403.aspx" responseMode="Redirect" />
            <error statusCode="404" prefixLanguageFilePath=""  path="404.aspx" responseMode="Redirect"/>
        </httpErrors>
        <modules runAllManagedModulesForAllRequests="true"/>
    </system.webServer>
    <location path="Admin">
        <system.web>
            <authorization>
                <deny users="?"/>
            </authorization>
        </system.web>
    </location>





</configuration>
Modificato da thedoors il 12 maggio 2016 21.51 -
Modificato da thedoors il 12 maggio 2016 21.53 -
91 messaggi dal 27 ottobre 2009
Anche chiudendo i SqlDataSource con Dispose(), IIS si impalla. In locale. Attendo un minuto e riavvio IIS.
Senza messaggi d'errore anche con <customErrors mode="Off">.
Ora provo sul server.
91 messaggi dal 27 ottobre 2009
Buongiorno,
stamattina ore 08:17 la pagina non si apre e rimane in continuo reload.
Il server non restituisce errori.
Dopo un minuto ho rinominato il web.config e la pagina è ricomparsa.
Ho chiuso con Dispose() tutte le connessioni anche di una classe che precedentemente avevo chiuso con Close().
Le pagina quando funzionano si aprono in un attimo, anche perché i dati da caricare sono pochi.
Ho anche modificato il web.config della cartella principale su custum off <customErrors mode="Off">
91 messaggi dal 27 ottobre 2009
Può essere che se ci sono più utenti che accedono all'area amministrativa, magari richiedendo la stessa pagina, il server non risponda?
23 messaggi dal 06 marzo 2008
Ciao, personalmente farei il tentativo di inserire le connessioni al db in un blocco using come nell'esempio seguente ....perchè ti mette al sicuro che vengono eseguiti i dispose sugli oggetti creati anche in caso di break come ce ne sono nel codice che hai postato
using (SqlConnection connection = new SqlConnection(connectionString))
{
int employeeID = findEmployeeID();
try
{

connection.Open();
SqlCommand command = new SqlCommand("UpdateEmployeeTable", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("@EmployeeID", employeeID));
command.CommandTimeout = 5;

command.ExecuteNonQuery();
}
catch (Exception)
{
/*Handle error*/
}

}

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.