【发布时间】:2014-01-07 10:47:44
【问题描述】:
这是已运行至少 5 年的旧代码。 DLL 恰好与 Paypal 的 PayFlowPro 商家处理服务有关,但我认为这是导致问题的 Windows 场景。
突然,根据下面的代码,我在浏览器中看到了这个错误:
> 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。
【问题讨论】:
-
日志中的 443 不是状态/错误代码,而是端口号 (443 = SSL)。响应代码接近行尾 (200 = OK)。真正的问题是无法创建 PayPal.Payments.Communication.PayflowNETAPI。你的服务器有什么变化吗? AppPool 仍设置为 32 位?
-
还要检查 AppPool .NET 版本是否发生变化,并检查 DLL 文件的权限。
-
附带说明:比较
client = null将始终评估为False。您必须使用IsNull()函数来检查Null值,因为Null被定义为不等于任何其他值的值,包括其他Null值。
标签: vbscript asp-classic iis-6 com-interop