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

时间:2016-06-10 09:28:24

标签: c# vbscript com

当我尝试访问我的经典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;
    }

此外,我注意到并且我不知道它是否相关,这个代码在具有2个服务器的环境中破解很多,并且当第一个服务器太忙时在它们之间进行平衡。如果我在一台服务器上试用它,我只能破坏它一次。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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

另外需要提及的是,在我们的环境中,我们有2台服务器,我们正在它们之间进行一些平衡。当应用程序仅在一台服务器上运行时,反序列化就可以了,我们没有问题,但是当我们切换到另一台服务器时,我们遇到了这个问题。

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