Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用COM的vbscript中的随机无效过程调用或参数_C#_Vbscript_Com - Fatal编程技术网

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

C# 使用COM的vbscript中的随机无效过程调用或参数,c#,vbscript,com,C#,Vbscript,Com,当我尝试访问我的经典ASP应用程序时,我得到一个随机错误“无效的过程调用或参数”。导致此错误的行从C#组件调用方法 以下是vbscript中打断的行: tmpArray2=session.get(arrName)”,其中arrName是一个字符串 这种线也会开裂: 如果UBound(session.get(“RTT_ID”))“-1”,则 下面是get方法的组件代码: 公共对象获取(字符串键) { if(key==null | | IsExpired) { 返回null; } 如果(!Ses

当我尝试访问我的经典ASP应用程序时,我得到一个随机错误“无效的过程调用或参数”。导致此错误的行从C#组件调用方法

以下是vbscript中打断的行:

tmpArray2=session.get(arrName)”,其中arrName是一个字符串
这种线也会开裂:

如果UBound(session.get(“RTT_ID”))“-1”,则
下面是get方法的组件代码:

公共对象获取(字符串键)
{
if(key==null | | IsExpired)
{
返回null;
}
如果(!SessionData.ContainsKey(键))
{
var sessionData=GetDbSessionData(键);
var cachedValue=默认值(对象);
if(sessionData==null | | sessionData.Value==null | | sessionData.ValueType==null)
{
LogManager.Instance.LogFormat(this,LogLevel.Warning,“找不到会话数据。SessionId:'{0}';Key:'{1}'”,this.SessionInfo.Id,Key);
cachedValue=null;
}
其他的
{
cachedValue=SessionDataSerializer.Instance.DeserializeSessionData(sessionData.Value,sessionData.ValueType);
}
var cachedSessionData=新的cachedSessionData();
cachedSessionData.CachedValue=CachedValue;
cachedSessionData.DbEntity=sessionData;
Add(key,cachedSessionData);
}
RefreshExpirationDate();
返回SessionData[key].CachedValue;
}
另外,我注意到的是,我不知道它是否相关,这段代码在一个有两台服务器的环境中出现了很多漏洞,并且在第一台服务器太忙时在它们之间进行了平衡。如果我在一台服务器上尝试,我只成功地破坏了一次


有什么想法吗?

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

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


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

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

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


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

您的vbscript代码正在查找一个变量,而您正在返回字符串的值。。。(即:获取(字符串键))@SteveKline谢谢你的回答。我应该如何更改代码以使其正常工作?问题是,有时该调用有效,而其他调用返回该错误。当它不起作用时,可能会出现错误,因为返回中没有数据。您可以启用“On Error Resume Next”并使用“if err.number 0 Then….err.clear….Error handle stuff here.然后在if/end if语句之后处理错误。On Error Resume Next.@SteveKline如果问题不是返回数据,则只需确保您有一个字符串
tmpArray2=session.get(arrName)&”“
如果UBound(session.get(“RTT_ID”)&”“)“-1”则
,无需在出现错误时继续下一步,这时事情会变得一团糟,特别是如果您没有在出现错误时将其切换回0。我会先将
session.get()
的值放在局部变量中,然后再尝试将其传递到像
UBound()
这样的函数中,这样您就可以首先计算结果。这就是我的观点,当没有从这些变量返回数据或数组时,它会出错。。。您必须在脚本中构建错误处理或按原样接受它。您的vbscript代码正在查找变量,您正在返回字符串的值。。。(即:获取(字符串键))@SteveKline谢谢你的回答。我应该如何更改代码以使其正常工作?问题是,有时该调用有效,而其他调用返回该错误。当它不起作用时,可能会出现错误,因为返回中没有数据。您可以启用“On Error Resume Next”并使用“if err.number 0 Then….err.clear….Error handle stuff here.然后在if/end if语句之后处理错误。On Error Resume Next.@SteveKline如果问题不是返回数据,则只需确保您有一个字符串
tmpArray2=session.get(arrName)&”“
如果UBound(session.get(“RTT_ID”)&”“)“-1”则
,无需在出现错误时继续下一步,这时事情会变得一团糟,特别是如果您没有在出现错误时将其切换回0。我会先将
session.get()
的值放在局部变量中,然后再尝试将其传递到像
UBound()
这样的函数中,这样您就可以计算结果了