使用 COM 的 vbscript 中的随机无效过程调用或参数

Random invalid procedure call or argument in vbscript using a COM

当我尝试访问我的经典 ASP 应用程序时,我收到随机错误 "Invalid Procedure Call or Argument"。导致此错误的行从 C# 组件调用方法。

这是 vbscript 中中断的行:

tmpArray2 = session.get(arrName) 'where arrName is a string

它也在这种行上破解:

if UBound(session.get("RTT_ID")) <> "-1" then

这里是 get 方法的组件代码:

 public object get(string key)
    {
        if (key == null || IsExpired)
        {
            return null;
        }

        if (!SessionData.ContainsKey(key))
        {
            var sessionData = GetDbSessionData(key);

            var cachedValue = default(object);
            if (sessionData == null || sessionData.Value == null || sessionData.ValueType == null)
            {
                LogManager.Instance.LogFormat(this, LogLevel.Warning, "Session data not found. SessionId: '{0}'; Key: '{1}'.", this.SessionInfo.Id, key);
                cachedValue = null;
            }
            else
            {
                cachedValue = SessionDataSerializer.Instance.DeserializeSessionData(sessionData.Value, sessionData.ValueType);
            }

            var cachedSessionData = new CachedSessionData();
            cachedSessionData.CachedValue = cachedValue;
            cachedSessionData.DbEntity = sessionData;

            SessionData.Add(key, cachedSessionData);
        }

        RefreshExpirationDate();

        return SessionData[key].CachedValue;
    }

另外,我注意到但我不知道它是否相关,这段代码在有 2 台服务器的环境中破解很多,并在第一个服务器太忙时在它们之间取得平衡。如果我在单个服务器上尝试,我只成功破坏了一次。

有什么想法吗?

感谢您的回答。问题是,因为我们想提高性能,所以我们必须序列化发送到组件的每个对象,并在我们 return 将它编辑到 vbscript 时反序列化它。问题是我们有一个包含其他数组的数组,当我们反序列化该数组时,我们无法 return 子数组,这就是导致问题的原因。我们使用 MessageBox 库进行反序列化。

另一件要提到的事情是,在我们的环境中,我们有 2 台服务器,我们正在它们之间做一些平衡。当应用程序只在一台服务器上运行时,反序列化没问题,我们没有遇到任何问题,但是当我们切换到另一台服务器时,我们遇到了这个问题。

也许这个答案会帮助其他人了解如果您收到此类错误会发生什么。