2010-10-07 5 views
1

Nous programmons ASP classique pour une grande application web (ancienne). Cela fonctionne très bien en utilisant WSC (composants de script Windows) pour séparer l'interface graphique de la logique métier; les WSC contiennent la logique métier, l'ASP classique est utilisé pour afficher les informations renvoyées. Les valeurs de chaîne de retour du WSC, les jeux d'enregistrements ADO et, dans certains cas, les objets vbscript. Actuellement, nous essayons de passer de l'utilisation de VBScript dans les WSC à Python (pyscript), de sorte qu'au moins la langue utilisée soit moderne et dispose de fonctionnalités plus modernes (comme SOAP, les solutions ORM ou Memcached).Comment déboguer Python dans un WSC

En utilisant du code Python en ASP classique fonctionne très bien en pywin32 et l'enregistrement Python comme langage de script, mais nous connaissons deux problèmes fondamentaux:

  1. Dans un WSC, en utilisant la balise « outils » devrait tous les objets standard d'IIS (serveur, session, requête, réponse, etc.) disponibles pour le code dans le WSC. Lorsque vous utilisez Python, cela ne semble pas fonctionner. Peut-être que j'utilise une syntaxe incorrecte, ou j'ai besoin de définitions supplémentaires dans le code Python, mais je n'arrive pas à comprendre comment accéder à ces objets. Plus d'informations sur ce WSC: http://aspalliance.com/414

  2. Lorsqu'une erreur se produit sur une page ASP, le retraçage est affiché dans le navigateur et tout va bien. Cependant, si une erreur se produit à l'intérieur d'un WSC, il y a peu ou pas de retour sur le navigateur. Lors de l'utilisation de VBScript, Windows permet au développeur de choisir un débogueur, et (dans notre cas) Visual Studio intervient et nous montre l'erreur et la ligne qui contient l'erreur. Cela fonctionne tant que vous développez localement (donc la machine de développement locale exécute IIS). Lorsque vous utilisez Python, rien ne se passe, juste un message très vague dans le navigateur, i.e.:

erreur '80020009' exception est survenue.

J'ai essayé différentes manières de contourner ce problème; J'ai essayé d'importer win32traceutil et d'ouvrir une fenêtre de collecteur de traces. La chose étrange est qu'il capturera toutes mes instructions print(), mais pas les messages d'erreur Python. Il semble presque que stdout soit capturé, mais stderr ne l'est pas. S'il y a d'autres façons en Python de rediriger ou d'afficher des messages d'erreur, j'aimerais les essayer aussi. J'ai même envisagé d'utiliser un très gros try..except, mais en plus d'être très mauvais style, le WSC contient un tas de fonctions séparées, et cela signifierait implémenter try..except dans toutes les fonctions. Je ne veux vraiment pas y aller.

Si quelqu'un peut m'aider avec ces deux problèmes (en particulier le numéro 2 est un grand showstopper pour l'utilisation de Python dans notre société), il serait grandement apprécié. S'il y a un autre moyen de rendre visible la trace de Python, ce serait un grand pas en avant. Par ailleurs, j'ai déjà envoyé cette question à différentes listes de diffusion, y compris la liste de diffusion pywin32, mais jusqu'à présent, personne n'a été capable de nous aider.

Alors, aidez-moi stackoverflow, tu es mon seul espoir ...

Merci Tous,

Erik

J'ai un exemple très simple ci-dessous, se composant d'une page ASP et Python WSC, la page ASP instancie le WSC et appelle certaines fonctions de celui-ci. Response.write ne fonctionnera pas car, pour une raison quelconque, l'objet Response ne peut pas être utilisé (problème nr.1), même s'il y a une erreur dans le code Python, le navigateur n'affiche pas de traceback ou de message clair (problème n ° 2). Le code doit être exécuté sous IIS ofcourse et Python et pywin32 doivent être installés (ou la distribution de Python ActiveState, qui comprendra déjà pywin32)

python.wsc:

<?xml version="1.0" encoding="Windows-1252" ?> 
<component> 
<?component error="true" debug="true"?> 
<registration 
     description="python" 
     progid="python.WSC" 
     version="1.00" 
     classid="{F236F59E-3F6F-44EA-A374-DBFA9F90ECB3}" 

</registration> 
<public> 
     <method name="testmethod"> 
     </method> 
     <method name="helloWho"> 
       <PARAMETER name="who"/> 
     </method> 
</public> 

<implements type="ASP" id="ASP"/> 

<script language="Python"> 
<![CDATA[ 
def testmethod(): 
     Response.Write('output of results converted to a string') 

def helloWho(who): 
     return "Hello "+who+"!" 
]]> 
</script> 
</component> 

page ASP:

<%@ Language=VBscript %> 
<% 
     set pythonwsc= GetObject("script:"&Server.MapPath("./python.wsc")) 
     response.write(pythonwsc.helloWho("world")&"<br>") 
     pythonwsc.testmethod() 
%> 

Répondre

0

que pour # 2, vous devez prendre des exceptions dans le VBScript qui appelle le composant. Un WSC est juste un composant com. Ignorez un instant l'exécution de python lorsque vous invoquez votre WSC. C'est juste un composant COM.

Des erreurs peuvent se produire lors de l'appel de ce composant. Lorsque vous invoquez un composant susceptible d'échouer, il est recommandé d'utiliser la gestion des erreurs. Dans VBSCript, cela signifie "On Error Resume" ou quoi que ce soit.

En Javascript, cela signifie une clause try..catch.

Curieux: pourquoi utiliser python dans le WSC? Pourquoi ne pas simplement Jscript - beaucoup plus mainstream, aussi tout à fait moderne.

+0

Salut Cheeso, Merci pour votre réponse. Voulez-vous dire gérer les erreurs dans la page ASP ou dans le WSC? J'ai peur que la page ASP ne me donne aucune idée de ce qui ne va pas dans le WSC. La gestion de l'erreur dans le code Python dans le WSC est faisable, mais lors du codage/débogage, ce n'est pas vraiment pratique. –

+0

Quant à savoir pourquoi Python: Python a des frameworks (web) très matures, l'utiliser dans notre projet actuel nous permettrait de nous familiariser avec le langage et de l'utiliser plus tard dans d'autres projets (web ou desktop). Javascript est toujours principalement une langue côté client. J'ai entendu parler des implémentations javascript côté serveur, mais je pense que dans l'ensemble, Python est un choix plus sûr. –

+0

Vous pouvez gérer les erreurs dans la page ASP et le WSC. Javascript a try/catch, et en utilisant cela, vous pouvez enregistrer les erreurs dans votre journal d'erreur préféré du WSC. En ce qui concerne les implémentations javascript côté serveur, qu'en est-il de l'ASP? Les deux langues d'origine d'ASP étaient VBScript et JScript. JScript est toujours supporté. Je m'attendais à ce que l'utilisation d'une seule langue pour le côté serveur (Javascript dans le code de rendu de page et WSC) économiserait quelques tracas. – Cheeso

Questions connexes