2010-03-26 2 views
2

J'ai une page d'interface SQL dans mon application Web ASP classique qui permet aux utilisateurs admin d'exécuter des requêtes sur la base de données de l'application (MSDE 2000). simplement se compose d'un textarea que l'utilisateur soumet et l'application retourne la liste résultant des enregistrements comme ci-dessousSQL 2000 (MSDE) se bloque lorsqu'il reçoit une requête erronée d'une application Web ASP classique

Dim oRS 
Set oRS = Server.CreateObject("ADODB.Recordset") 
oRS.ActiveConnection = sConnectionString 

// run the query - this is for the admin only so doesnt check for sql safe commands etc. 
oRS.Open Request.Form("txtSQL") 

If Not oRS.EOF Then 
    // list the field names from the recordset 
    For i = 0 to oRS.Fields.Count - 1 
     Response.Write oRS.Fields(i).name & " " 
    Next 
    // show the data for each record in the recordset 
    While Not oRS.EOF 
     For i = 0 to oRS.Fields.Count - 1 
     Response.Write oRS.Fields(i).value & " " 
     Next 
     Response.Write "<br />" 
     oRS.Movenext() 
    Wend 
End If 

le problème est que si vous envoyez une requête non valide (avec une faute d'orthographe, joignez-vous invalide etc.) au lieu de rejeter une erreur immédiatement, il se bloque IIS (vous pouvez le voir en essayant de parcourir l'application à partir d'un autre ordinateur, il échoue) pendant un certain nombre de minutes et THEN renvoie l'erreur. Je ne sais pas pourquoi! Quelqu'un peut-il aider?

+0

S'IL VOUS PLAÎT NE PAS COMMENTER (HEH, SCUZE LE PUN) SUR LE // COMMENTAIRE DELIMITER DANS CE CODE EXEMPLE! JE SAIS QU'ILS SONT SUPPOSÉS D'ÊTRE - STACKOVERFLOW MONTRE SEULEMENT COMMENTAIRES MIEUX AVEC // – Jimbo

+0

quel genre d'aide voulez-vous? Voulez-vous que SQL Server 2000 soit corrigé? Voulez-vous que Classic ASP soit corrigé? –

+0

@John: J'espère que quelqu'un a rencontré cela avant ou comprend ce qui se passe entre IIS et SQL Server qui pourrait causer ce blocage et aider à arrêter cela se passe ... Je ne sais pas où l'erreur est en ce moment (même si je connais le code fonctionne bien) – Jimbo

Répondre

2

Eh bien, travaillant au support MS j'ai eu une demande similaire une fois. Je ne dis pas que c'est toi qui fais la même chose, mais je te demande des histoires comme ça, et cela peut éclairer quelque peu. J'ai reçu un appel promu à partir d'un centre de support externe fonctionnant en Inde qui a supporté ASP (et il a fait assez de pression pour qu'il soit promu aux services de support processionnel SQL Server niveau 3 - la "dernière ligne de défense"). Sur un site Web, SQL Server cesserait de répondre à une requête SQL spécifique. Le serveur arrêterait de faire quoi que ce soit, même si IIS n'était plus correctement utilisable. J'ai obtenu un cas complet documenté d'un collègue très entusiastique qui a même réussi à prouver que quelque chose n'allait pas avec SQL Server parce que les traces de la pile (niveau C++) montraient le pilote OleDB suspendu dans l'appel à SQL Server. La première fois dans ma vie, quelqu'un m'a montré que le niveau de trace de la pile pour SQL Server s'est écrasé. Quoi qu'il en soit, certaines recherches ont abouti: le programmeur qui a écrit le site à l'origine et qui avait toujours été renvoyé par le client essayant de réparer le désordre n'aurait pas dû utiliser ASP mais servir des hamburgers à la place. Le client avait cette page particulière faisant beaucoup d'appels SQL compelx - et la base de données n'avait AUCUN INDEX. Fondamentalement, il irait dans "attachant pour faire une douzaine de scans de table" sur un système de disque très bon marché. Après avoir ajouté même quelques indices, le système est devenu utilisable - et le client est allé à la recherche de toute la base de données complexe. La personne de soutien a eu honteusement honte de ne pas avoir vérifié ce que SQL Server était en train de FAIRE (ce qui aurait entraîné une exécution maladroite et un IO bloqué immédiatement).

Et voici l'histoire revient à vous;)

Vous dites avec une mauvaise requête, IIS stands pour les minutes.

Pouvez-vous valider cela: * Cela se produit-il sur IIS? Faire un exemple, et chcking dans IIS et dans Enterprise Manager? Si elle se bloque également dans Enterprise Manager - ce n'est pas IIS. * Il se bloque IIS comme dans l'application. Est-ce que le reste de IIS/autres applications/pages statiques fonctionne toujours? * Le code se passe-t-il sur une page, et non dans un élément central/un gestionnaire d'événements/une connexion synchronisée de sorte qu'un seul accès suspendu bloque toute l'application? * Quelle est la charge du processeur IIS et le chargement de SQL Server pendant cet événement? * SQL Server ne se trouve pas sur le même ordinateur? (donc il surcharge l'ordinateur et frappe donc aussi IIS)?

Je ne peux pas vraiment imaginer ce comportement sans quelques problèmes du côté IIS. Basiquement, donnez-nous un peu plus de contexte et nous devrions le trouver;) En attendant, appréciez mon histoire.

Questions connexes