【异常描述】一个ActiveX DLL工程,写出来给 ASP 调用的,功能是用DOMDocument4下载并分析WebService的WSDL页面,生成一个WebMethod以及参数列表(至于怎么调用是后话......)用一个Standart EXE工程测试通过,完全正常,能Load 到 XML 页面,也能取出里面的信息
分析结果一切正常。但是在ASP页面里,一直都无法通过,经过N小时的调试,发现是DOMDoc.Load以后
直接执行下面的过程,而这个时候DOMDoc还没准备好,注:async属性已经设置为 False【我的解决办法】Dim vTimeOut As Long: vTimeOut = 0
m_URL = vURL
'加载文档
'===============================================
'上面已经 Set m_Doc=New DOMDocument40
'已经设置禁止使用异步模式
'===============================================
m_Doc.async = False
m_Doc.Load vURL & "?WSDL"
'------------------------------------------
'我想在这里这里来一个循环,检测是否加载完毕
'超过一定时间就抛出超时错误
'PS : Sleep API 在模块中已经申明
'实事证明:这段语句根本就没有执行!为什么?
'------------------------------------------
Do While m_Doc.readyState <> 4
Sleep 100
vTimeOut = vTimeOut + 100
If vTimeOut > m_Timeout Then
Err.Raise vbObjectError, "加载 WSDL 数据", "超时 " & vTimeOut & " > " & m_Timeout
End If
Loop
'============================================
'不管怎样,直接执行这个,下面的判断始终为真
'============================================
If m_Doc.parseError.errorCode <> 0 Then
Err.Raise vbObjectError, _
m_Doc.parseError.srcText, _
"输入路径: " & vURL & "?WSDL" & vbCrLf & _
"异步模式:" & m_Doc.async & vbCrLf & _
"返回代码:" & m_Doc.xml & vbCrLf & _
"是否超时:" & vTimeOut & " : " & m_Timeout & vbCrLf & _
"错误代码:" & m_Doc.parseError.errorCode & vbCrLf & _
"错误原因:" & m_Doc.parseError.reason & vbCrLf & _
"错误位置: [" & m_Doc.parseError.Line & ":" & m_Doc.parseError.linepos & "] @ " & m_Doc.parseError.filepos & vbCrLf & _
"实际路径:" & m_Doc.parseError.URL
End If【注】
已经测试过:修改 DLL 工程的线程模型为 单线程 和单元线程 都不行【新问题】
1、为何设置了async=False还是不经加载直接进入下一步?
2、为何上面的Sleep循环不执行?难道DOMDocument40.readyState默认就等于4?
3、为何同样代码在Standard EXE程序中能正常运行?期待高手出现(解决后另开贴送200分)
分析结果一切正常。但是在ASP页面里,一直都无法通过,经过N小时的调试,发现是DOMDoc.Load以后
直接执行下面的过程,而这个时候DOMDoc还没准备好,注:async属性已经设置为 False【我的解决办法】Dim vTimeOut As Long: vTimeOut = 0
m_URL = vURL
'加载文档
'===============================================
'上面已经 Set m_Doc=New DOMDocument40
'已经设置禁止使用异步模式
'===============================================
m_Doc.async = False
m_Doc.Load vURL & "?WSDL"
'------------------------------------------
'我想在这里这里来一个循环,检测是否加载完毕
'超过一定时间就抛出超时错误
'PS : Sleep API 在模块中已经申明
'实事证明:这段语句根本就没有执行!为什么?
'------------------------------------------
Do While m_Doc.readyState <> 4
Sleep 100
vTimeOut = vTimeOut + 100
If vTimeOut > m_Timeout Then
Err.Raise vbObjectError, "加载 WSDL 数据", "超时 " & vTimeOut & " > " & m_Timeout
End If
Loop
'============================================
'不管怎样,直接执行这个,下面的判断始终为真
'============================================
If m_Doc.parseError.errorCode <> 0 Then
Err.Raise vbObjectError, _
m_Doc.parseError.srcText, _
"输入路径: " & vURL & "?WSDL" & vbCrLf & _
"异步模式:" & m_Doc.async & vbCrLf & _
"返回代码:" & m_Doc.xml & vbCrLf & _
"是否超时:" & vTimeOut & " : " & m_Timeout & vbCrLf & _
"错误代码:" & m_Doc.parseError.errorCode & vbCrLf & _
"错误原因:" & m_Doc.parseError.reason & vbCrLf & _
"错误位置: [" & m_Doc.parseError.Line & ":" & m_Doc.parseError.linepos & "] @ " & m_Doc.parseError.filepos & vbCrLf & _
"实际路径:" & m_Doc.parseError.URL
End If【注】
已经测试过:修改 DLL 工程的线程模型为 单线程 和单元线程 都不行【新问题】
1、为何设置了async=False还是不经加载直接进入下一步?
2、为何上面的Sleep循环不执行?难道DOMDocument40.readyState默认就等于4?
3、为何同样代码在Standard EXE程序中能正常运行?期待高手出现(解决后另开贴送200分)
解决方案 »
- Set xx = yy 和 Set xx = New yy 有区别吗?
- 天啊!怎样突破COM16的限制啊?
- vb中的中文问题
- 我用VB做报表,打开时提示"报表宽度大于纸张宽度"这是什么原因`~在线等,急~~帮个忙~~~
- 一个小问题?
- 如何实现对COBOL中IF语句中自动添加THEN,ELSE,EndIF
- 我写的程序为什么在被移动后,再打开时就会出现社会窗体,工程找不到,
- 如何定MSFlexGrid中每一行的宽度
- 这么一套软件该定价多少钱
- 请教一个问题(据说QBASIC就能解决)
- 请教一个用ADODC控件连接FOXPRO数据库的简单问题。。谢谢
- 急,我用TextStream对象打开一个文本文件一行一行的读出数据,可用SkipLine方法,怎么不是一行一行的读呢?
这样看是否加载
我想你的程序是不是load 的路径有问题
建议你直接在asp中使用xml对象处理,不需要再封装到dll中吧?
这样等待返回值就可以了真奇怪,为啥一定要等待返回值呢?不管了,搞定了就行
而Dom不能用来取远程的,只能取本地的。