【问题标题】:HTTP Status 443 on Server.CreateObject in VBScript under Classic ASP IIS 6.0经典 ASP IIS 6.0 下 VBScript 中 Server.CreateObject 上的 HTTP 状态 443
【发布时间】: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


【解决方案1】:

谢谢大家。我希望我保存了我原来的错误。我一直在做 C# 这么久,我忘了如何编写 VBScript。我试图添加可能给我错误结果的错误处理。

如果有评论的人会给出答案,我会接受他们的。

443 是另一个错误的线索,我认为这是一个错误,而不是端口号。

很遗憾,我没有保存原来的错误。我在原始代码中添加了代码,以提供更好或更严格的错误处理,并且添加“= null”测试是一个坏主意。

这是对 VBScript 使用 empty vs nothing 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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 2010-12-02
    • 2022-07-01
    • 1970-01-01
    相关资源
    最近更新 更多