Domanda

Ho un'applicazione che risiederà all'interno di una rete business2business che comunicherà con il nostro AS400 nel nostro ambiente di rete interno. Il firewall è stato configurato per consentire la richiesta di dati attraverso il nostro AS400, ma stiamo riscontrando un enorme ritardo nella velocità di connessione e nei tempi di risposta. Ad esempio, ciò che richiede meno di mezzo secondo nei nostri ambienti di sviluppo locale è richiedere fino a 120 secondi nel nostro ambiente B2B.

Questa è la funzione che stiamo utilizzando per ottenere i nostri dati. Stiamo utilizzando i blocchi dell'applicazione della libreria aziendale, quindi l'oggetto ASI è il database ...

/// <summary>
/// Generic function to retrieve data table from AS400
/// </summary>
/// <param name="sql">SQL String</param>
/// <returns></returns>
private DataTable GetASIDataTable(string sql)
{
    DataTable tbl = null;

    HttpContext.Current.Trace.Warn("GetASIDataTable(" + sql + ") BEGIN");
    using (var cmd = ASI.GetSqlStringCommand(sql))
    {
        using (var ds = ASI.ExecuteDataSet(cmd))
        {
            if (ds.Tables.Count > 0) tbl = ds.Tables[0];
        }
    }
    HttpContext.Current.Trace.Warn("GetASIDataTable() END");
    return tbl;
}

Sto cercando di fare brainstorming su alcune idee da considerare sul perché questo accada.

È stato utile?

Soluzione

Non ho mai usato ASP.NET o AS400 con rabbia, ma ho già visto questo tipo di comportamento prima e di solito indicava un tipo di problema di rete, in genere una ricerca DNS inversa che sta scadendo.

Supponendo che il ping sia attivato tramite il firewall, verificare che sia possibile eseguire il ping in entrambe le direzioni.

Esegui anche traceroute da ogni macchina per provare a diagnosticare un ritardo.

Spero che sia d'aiuto.

Altri suggerimenti

Scusa ma non posso dirti cosa sta succedendo ma ho solo un paio di commenti ... Prima di tutto vorrei generare sql, vedere se ha molti join e / o sta colpendo una tabella (file) con una grande quantità di record. Se vuoi davvero scavare a fuoco il tuo profiler preferito (io uso Ants Profiler) e provare a trovare un profiler per il 400 - vedi quali sono le risorse del server e la query effettiva dopo che passa attraverso il driver odbc.

Ho lavorato con asp.net e as400 alcune volte e il modo in cui ho avuto più successo è in realtà utilizzare SQL Server con un server collegato a AS400. Ho creato una vista per semplificare il lavoro, nascondendo le stranezze della denominazione as400. Ha funzionato bene nel mio scenario perché l'applicazione doveva comunque estrarre informazioni dal server sql.

Ho pensato di menzionarlo nel caso in cui aiuti ... buona fortuna

Controlla anche le dimensioni del tuo sistema iSeries. A seconda della dimensione della query e se il sistema è sottodimensionato per le applicazioni in esecuzione su di esso, ciò potrebbe richiedere del tempo. Mentre non dovrebbe essere buttato fuori come una possibilità, in passato ho visto un comportamento simile. Ma ovviamente più probabilmente è un problema di rete.

L'altra idea se è possibile risolvere il problema di velocità o è un problema di dimensionamento è di memorizzarlo in un MS SQL Server, quindi scrivere i record da SQL Server su iSeries da lì.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top