代码之家  ›  专栏  ›  技术社区  ›  Sebastian

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

  •  1
  • Sebastian  · 技术社区  · 9 年前

    当我试图访问我的经典ASP应用程序时,我得到一个随机错误“无效的过程调用或参数”。导致此错误的行从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;
        }
    

    此外,我注意到的是,我不知道它是否相关,这段代码在有两个服务器的环境中会出现很多问题,当第一个服务器太忙时,它会在它们之间进行平衡。如果我在一台服务器上尝试它,我只能破坏一次。

    有什么想法吗?

    1 回复  |  直到 9 年前
        1
  •  0
  •   Sebastian    9 年前

    谢谢你的回答。问题是,因为我们想提高性能,所以必须序列化发送到组件的每个对象,并在将其返回到vbscript时反序列化。问题是,我们有一个数组包含其他数组,当我们反序列化数组时,无法同时返回子数组,这导致了问题。我们用于反序列化MessageBox库。

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

    也许这个答案可以帮助其他人理解如果你收到这种错误会发生什么。

    推荐文章