2013-12-19 42 views
0

這是已運行至少5年的舊舊代碼。該DLL恰好與Paypal的PayFlowPro商家處理服務有關,但我認爲這是導致此問題的Windows情況。經典ASP IIS 6.0下的VBScript中的Server.CreateObject上的HTTP狀態443

突然,基於下面的代碼,我看到這個錯誤在瀏覽器:

> Error with new credit card processing software, please call Neal at xxx-xxx-xxxx 
> Error Ref102: client = Server.CreateObject returned Null 
> (Detailed error: Object doesn't support this property or method) 
> (Detailed error: 438) 

的IIS日誌顯示我的443:

2013-12-19 00:57:24 W3SVC4 173.45.87.10 POST /myapps/adm_settle.asp - 443 - 76.187.77.159 Mozilla/5.0+(Windows+NT+6.2;+WOW64;+rv:26.0)+Gecko/20100101+Firefox/26.0 200 0 0 

因爲我看到了433以上,我在想一定有一些安全錯誤。就像測試一樣,我嘗試將應用程序池用戶放入管理員組,重新啓動IIS,但仍然得到完全相同的錯誤。我還給出了用戶特定的訪問權限來讀取磁盤上的.DLL文件。

我確實運行了REGASM來嘗試重新註冊.DLL。我也嘗試過REGSRV32,但我猜測在.NET DLL上失敗了。自從我處理這個老的軟件已經有幾年了。

的ASP/VBScript代碼:

Err.Clear 
    On Error Resume Next 
    set client = Server.CreateObject("PayPal.Payments.Communication.PayflowNETAPI") 
    If Err.number > 0 Then 
     response.write "Error with new credit card processing software, please call Neal at xxx-xxx-xxxx" 
     response.write "</br>(Detailed error: " & Err.Description & ")" 
     response.write "</br>(Detailed error: " & Err.Number & ")" 
     response.End 
    End If 
    If client Is Nothing Then 
     Response.write "Error with new credit card processing software, please call Neal at xxx-xxx-xxxx" 
     Response.Write "</br>Error Ref101: client = Server.CreateObject returned 'nothing' " 
     response.write "</br>(Detailed error: " & Err.Description & ")" 
     response.write "</br>(Detailed error: " & Err.Number & ")" 
     Response.End 
    End If 
    If client = null Then 
     Response.write "Error with new credit card processing software, please call Neal at xxx-xxx-xxxx" 
     Response.Write "</br>Error Ref102: client = Server.CreateObject returned Null " 
     response.write "</br>(Detailed error: " & Err.Description & ")" 
     response.write "</br>(Detailed error: " & Err.Number & ")" 
     Response.End 
    End If 

而且,我不知道的443 HTTP狀態如何被改變爲438 Err.Number的。

+1

在日誌中的443是不是狀態/錯誤代碼,但是端口號(443 = SSL)。響應代碼接近行尾(200 = OK)。真正的問題是無法創建PayPal.Payments.Communication.PayflowNETAPI。你的服務器有什麼改變嗎? AppPool仍然設置爲32位? – johna

+0

另外檢查AppPool .NET版本沒有改變,並檢查DLL文件的權限。 – johna

+0

作爲一個附註:比較'client = null'將總是評估爲'False'。您必須使用['IsNull()'](http://msdn.microsoft.com/zh-cn/library/zbchw6hz%28v=vs.84%29.aspx)函數來檢查「Null」值,因爲'Null'被定義爲一個不等於任何其他值的值,包括其他'Null'值。 –

回答

0

謝謝大家。我希望我保存了我原來的錯誤。我一直在做C#這麼久,我忘記了如何編寫VBScript代碼。我試圖添加錯誤處理,這可能會給我錯誤的結果。

如果有些評論的人會提出答案,我會接受他們。

443是另一個錯誤的軌跡和我的錯誤假設,這是一個錯誤,而不是一個端口#。

不幸的是,現在我沒有保存原始錯誤。我已經將代碼添加到我的原始代碼中,以提供更好或更嚴格的錯誤處理,並添加「= null」測試是一個糟糕的主意。

這是VBScript的使用空VS不得而知VS的isNull一個很好的解釋:http://evolt.org/node/346/

我刪除,並更正後的代碼是:

Err.Clear 
    On Error Resume Next 
    'set client = Server.CreateObject("PFProCOMControl.PFProCOMControl.1") 
    set client = Server.CreateObject("PayPal.Payments.Communication.PayflowNETAPI") 
    If Err.number > 0 Then 
     response.write "Error with new credit card processing software, please call Neal at 214-455-8060" 
     response.write "</br>(Detailed error: " & Err.Description & ")" 
     response.write "</br>(Detailed error: " & Err.Number & ")" 
     response.End 
    End If 
    If client Is Nothing Then 
     Response.write "Error with new credit card processing software, please call Neal at 214-455-8060" 
     Response.Write "</br>Error Ref101: client = Server.CreateObject returned 'nothing' " 
     response.write "</br>(Detailed error: " & Err.Description & ")" 
     response.write "</br>(Detailed error: " & Err.Number & ")" 
     Response.End 
    End If