当我尝试访问我的经典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个服务器的环境中破解很多,并且当第一个服务器太忙时在它们之间进行平衡。如果我在一台服务器上试用它,我只能破坏它一次。
有什么想法吗?
答案 0 :(得分:0)
感谢您的回答。问题是因为我们想要提高性能,所以我们必须序列化发送到组件的每个对象,并在将它们返回到vbscript时对其进行反序列化。问题是我们有一个包含其他数组的数组,当我们反序列化数组时,我们也无法返回子数组,这导致了问题。我们用于反序列化MessageBox库。
另外需要提及的是,在我们的环境中,我们有2台服务器,我们正在它们之间进行一些平衡。当应用程序仅在一台服务器上运行时,反序列化就可以了,我们没有问题,但是当我们切换到另一台服务器时,我们遇到了这个问题。
也许这个答案可以帮助其他人了解如果您收到此类错误会发生什么。