【发布时间】:2016-10-11 05:04:51
【问题描述】:
当我尝试访问我的经典 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 台服务器的环境中破解了很多,并在第一个服务器太忙时在它们之间进行了平衡。如果我在单个服务器上尝试它,我只成功地破坏了一次。
有什么想法吗?
【问题讨论】:
-
您的 vbscript 代码正在寻找一个 Variant 并且您正在返回一个字符串的值...(即 get(string key))
-
@SteveKline 谢谢你的回答。我应该如何更改代码以使其正常工作?问题是有时该调用有效,而另一些则返回该错误。
-
不工作的时候有可能,因为返回没有数据,所以报错。您可以启用“On Error Resume Next”并使用“if err.number 0 Then.... err.clear... Error handle stuff here。然后在 if/end if 语句之后处理错误。On Error继续下一步。
-
@SteveKline 如果问题是没有返回数据,那么只要确保你有一个字符串
tmpArray2 = session.get(arrName) & ""和If UBound(session.get("RTT_ID") & "") <> "-1" Then,不需要On Error Resume Next那是事情变得混乱的时候,尤其是如果你不这样做' t 再次使用On Error Goto 0将其关闭。我会先将session.get()的值放在一个局部变量中,然后再尝试将其传递给UBound()之类的函数,这样您就可以先评估结果。 -
这就是我的意思,当没有从这些数据或数组返回时它会出错......您必须在脚本中构建错误处理或按原样接受它。