2012-02-12 11 views
7

Il seguente script ASP mi sta dando l'errore: "HTTP/1.1 Errore 500 Server"Errore 500 Server per Python in ASP Script

<%@ Language = Python%> 
<% 
def main(): 
    Response.Write("My first ASP script!") 
main() 
%> 

quando l'eseguo su IIS 7.5 di Windows 7 (64 bit). Nel registro degli errori viene semplicemente menzionato un errore ASP_0147.

Ho installato Python 3.2 e Python attivo 3.2.2.3 sul server e registrato Python tramite: pyscript.py

Ho permesso applicazioni a 32 bit per il server. Ho anche installato Python per Windows per vedere se questo sarebbe di aiuto.

Potete suggerire come posso risolvere il problema?

UPDATE:

sono riuscito a ottenere questo lavoro ora python3 ma devo registrare con --debug, come segue:

C:\Python32\Lib\site-packages\win32comext\axscript\client>c:\Python32\python.exe 
pyscript.py --debug 
Requesting elevation and retrying... 
Registered: Python (for debugging) 

Perché funzionerà solo in modalità di debug ? È sicuro correre in questa modalità?

Ecco la traccia quando il debug è abilitato:

Object with win32trace dispatcher created (object=None) 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-SetScriptSite(<PyIActiveScriptSite at 0x00000000036923B0 with obj at 0x000000000056FFD8>,) [1,0,None] 
Debugging extensions (axdebug) module does not exist - debugging is disabled.. 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._QueryInterface_ with unsupported IID IActiveScriptProperty ({4954E0D0-FBC7-11D1-8410-006008C3FBFC}) 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-InitNew() [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-GetScriptDispatch(None,) [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._QueryInterface_ with unsupported IID {1D044690-8923-11D0-ABD2-00A0C911E8B2} ({1D044690-8923-11D0-ABD2-00A0C911E8B2}) 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-AddNamedItem('Response', 66) [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-AddNamedItem('Request', 66) [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-AddNamedItem('Server', 66) [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-AddNamedItem('Session', 66) [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-AddNamedItem('Application', 66) [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-AddNamedItem('ObjectContext', 66) [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-AddNamedItem('ASPGLOBALTLB', 74) [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-ParseScriptText('def main():\r\n Response.Write("My first ASP script!")\r\nmain()\r\n', None, None, 'STRIP EMBEDDED HTML COMMENTS', 0, 1, 192, 0) [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-GetScriptDispatch(None,) [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-AddNamedItem('ScriptingNamespace', 10) [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-SetScriptState(1,) [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-SetScriptState(0,) [1,0,None] 
in <win32com.axscript.client.pyscript.PyScript object at 0x00000000035946A0>._InvokeEx_-Close() [1,0,None] 

Grazie,

Barry

+0

La abilitare applicazioni a 32 bit è un'impostazione o n il pool di applicazioni, ma rilevante solo se il server è a 64 bit. Un pezzo simile di codice vbscript viene eseguito correttamente? –

+0

Sì, VBScript funziona correttamente. – Baz

+0

L'ASP ha 'Response.Write (" Il mio primo script ASP! ")', Ma la traccia di debug mostra 'Response.Write (" Il mio terzo script ASP! ") \ R \ n'. Puoi controllare se è la stessa pagina o pagina diversa. – user568109

risposta

5

non può essere la soluzione del caso, in passato ho avuto questo problema.
Le versioni recenti di activepython sembrano danneggiate per lo scripting attivo.
Sono stato in grado solo la versione 2.5.6.10.
Se la versione non è importante, è possibile provare quella versione precedente.

+0

Ho letto qualcosa a riguardo ma sono comunque riuscito a farlo funzionare sulla mia macchina windowsXP con Python 3.2. – Baz

+0

Anche se devo ammettere che se navigo all'interno di IIS Manager sul mio computer Windows, ottengo l'errore 500 se provo a caricare la mia pagina. Ho quindi bisogno di riavviare iis per questo sito Web in modo che la pagina funzioni di nuovo. – Baz

+0

Capisco. Tutti i miei tentativi erano su Windows 7. Avevo rinunciato :) Puoi provare a registrarti con 'pyscript.py --debug' e tracciare usando Pythonwin.exe. Forse puoi trovare qualcosa. –

2

Il problema è trace metodo e print istruzioni nel win32comext\axscript\client\framework.py perché nelle componenti COM scrivendo al sys.stdout o sys.stderr come l'affermazione print causa un'eccezione per esempio trace("Debugging extensions (axdebug) module does not exist - debugging is disabled..") alla linea 572 di framework.py causa un'eccezione.

Una soluzione è aggiungere import win32traceutil nel framework.py. Lo win32traceutil reindirizza l'output a win32trace remote collector e risolve il problema senza la necessità di abilitare il debugging per causare problemi di prestazioni.

Un'altra soluzione alternativa è il reindirizzamento di stdout e stderr a null, è possibile aggiungere uno snippet di codice seguente nella parte superiore di framework.py.

f = open('nul', 'w') 
    sys.stdout = f 
    sys.stderr = f 

UPDATE: La causa principale e la soluzione

C'è già un meccanismo in framework.py per evitare la stampa e tracciare le dichiarazioni di sollevare un'eccezione, ma il problema è nel metodo di SafeOutput classe write. Quando la traccia e il debug non sono abilitati, nel metodo di scrittura si verifica un'eccezione e win32api.OutputDebugString nella clausola except invocherà con la codifica errata che causa un'eccezione.Perché win32api.OutputDebugString accetta la stringa Unicode non un set di caratteri multibyte (MBCS) come argomento.

La soluzione:

nel win32comext\axscript\client\framework.py nella classe SafeOutput

class SafeOutput: 
softspace=1 
def __init__(self, redir=None): 
    if redir is None: redir = sys.stdout 
    self.redir=redir 
def write(self,message): 
    try: 
     self.redir.write(message) 
    except: 
     win32api.OutputDebugString(message.encode('mbcs')) 
def flush(self): 
    pass 
def close(self): 
    pass 

basta cambiare

win32api.OutputDebugString(message.encode('mbcs')) # ANSI Enconding 

a

win32api.OutputDebugString(message) # Unicode 
Problemi correlati