2009-03-03 7 views
4

J'ai une application qui résidera dans un réseau business2business qui communiquera avec notre AS400 dans notre environnement réseau interne. Le pare-feu a été configuré pour permettre la demande de données à travers notre AS400, mais nous observons un énorme décalage dans la vitesse de connexion et le temps de réponse. Par exemple, ce qui prend moins d'une demi-seconde dans nos environnements de développement local prend plus de 120 secondes dans notre environnement B2B.AS400 Connexion de données dans ASP.NET

C'est la fonction que nous utilisons pour obtenir nos données. Nous utilisons les blocs d'application de la bibliothèque de l'entreprise, de sorte que l'objet ASI est la base de données ...

/// <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; 
} 

Je suis en train de réfléchir à certaines idées à considérer pour expliquer pourquoi cela se produit.

+0

+1 Je voudrais vraiment savoir ce qui se passe. –

Répondre

2

ont jamais utilisé ASP.NET ou AS400 en colère, mais j'ai vu ce genre de comportement avant et il est habituellement indiqué une sorte de problème de réseau, généralement une recherche DNS inverse qui expire.

En supposant que le ping soit activé via votre pare-feu, vérifiez que vous pouvez effectuer un ping dans les deux directions.

Exécutez également traceroute à partir de chaque machine pour essayer et diagnostiquer où un retard pourrait être.

Espérons que ça aide.

+0

@brindy - Merci! Je m'en occuperai demain. – RSolberg

1

Désolé mais je ne peux pas vous dire ce qui se passe mais j'ai juste quelques commentaires ... D'abord je sortirais le sql, voir s'il a beaucoup de jointures et/ou frappe une table (fichier) avec une grande quantité d'enregistrements. Si vous voulez vraiment creuser votre profileur de choix (j'utilise Ants Profiler) et essayer de trouver un profileur pour le 400 - voir ce que sont les ressources du serveur ainsi que la requête réelle après qu'il passe par le pilote ODBC.

J'ai travaillé avec asp.net et as400 plusieurs fois et la façon dont j'ai eu le plus de succès est d'utiliser sql server avec un serveur lié à AS400. J'ai créé une vue pour le rendre plus simple à travailler - cacher les bizarreries de la dénomination as400. Cela a bien fonctionné dans mon scénario parce que l'application avait besoin de tirer des informations du serveur SQL de toute façon.

Je pensais que je citerais dans le cas où il aide ... bonne chance

+0

Les sélections sont comme ceci: sélectionnez a, b, c où x = y ... Rien de spécial. Très apprécié cependant. – RSolberg

0

Vérifiez également la taille de votre système iSeries. Selon la taille de la requête et si le système est sous-dimensionné pour les applications s'exécutant sur celle-ci, cela peut prendre du temps. Bien qu'il ne devrait pas être rejeté comme une possibilité, j'ai vu un comportement similaire dans le passé. Mais bien sûr, plus probable est un problème de réseau. L'autre idée si vous pouvez résoudre le problème de vitesse ou est un problème de taille est de le stocker dans un MS SQL Server puis écrire les enregistrements de SQL Server à l'iSeries à partir de là.