ASP Classic字符串常量未终止问题:SOAP API调用代码求助
解决ASP Classic调用SOAP API的"unterminated string constant"错误并完善代码
首先,咱们先搞定那个**"unterminated string constant"**错误——这个问题90%是因为你拼接SOAP请求字符串时的格式问题:
- 多行字符串拼接的下划线
_后面不能有任何空格(ASP对这个要求特别严格,多一个空格就会报错) - XML字符串里的双引号必须用两个双引号
""转义,不能漏 - 你代码里的
...说明SOAP请求的XML没写完,字符串没有闭合,这肯定会触发这个错误
接下来,我给你一份完整且修复后的代码,同时完善了SOAP调用的关键步骤:
<% Response.Write "<br>START<hr>" On Error Resume Next ' 开启错误捕获,方便排查调用过程中的问题 ' 1. 创建稳定的ServerXMLHTTP对象(推荐用6.0版本,兼容性更好) Set oXmlHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0") If Err.Number <> 0 Then Response.Write "创建ServerXMLHTTP对象失败: " & Err.Description Err.Clear Set oXmlHTTP = Nothing Response.End End If ' 2. 拼接完整的SOAP请求XML(注意下划线必须紧跟字符串,无多余空格) Dim SOAPRequest SOAPRequest = _ "<?xml version=""1.0"" encoding=""utf-8""?>" &_ "<soap:Envelope xmlns:soap=""http://www.w3.org/2003/05/soap-envelope"" xmlns:aut=""URL.xsd"">" &_ "<soap:Header/>" &_ "<soap:Body>" &_ "<aut:YourTargetMethod>" &_ ' 替换成你要调用的WebService方法名 "<aut:Param1>测试参数1</aut:Param1>" &_ ' 替换成接口要求的参数 "<aut:Param2>测试参数2</aut:Param2>" &_ "</aut:YourTargetMethod>" &_ "</soap:Body>" &_ "</soap:Envelope>" ' 3. 配置请求并发送 oXmlHTTP.Open "POST", "https://your-real-service-url.com/Service.asmx", False ' 替换为实际的WebService地址 ' SOAP 1.2必须设置这个Content-Type,1.1版本用text/xml; charset=utf-8 oXmlHTTP.setRequestHeader "Content-Type", "application/soap+xml; charset=utf-8" oXmlHTTP.setRequestHeader "Content-Length", Len(SOAPRequest) ' 发送请求 oXmlHTTP.Send SOAPRequest ' 4. 处理响应结果 If Err.Number <> 0 Then Response.Write "请求发送失败: " & Err.Description Err.Clear Else If oXmlHTTP.Status = 200 Then ' 请求成功,输出响应内容(用HTMLEncode避免XML标签被浏览器解析) Response.Write "响应状态: " & oXmlHTTP.Status & "<br>" Response.Write "响应内容:<br><pre>" & Server.HTMLEncode(oXmlHTTP.responseText) & "</pre>" Else Response.Write "请求出错,状态码: " & oXmlHTTP.Status & "<br>" Response.Write "错误详情:<br><pre>" & Server.HTMLEncode(oXmlHTTP.responseText) & "</pre>" End If End If ' 5. 释放对象,避免内存泄漏 Set oXmlHTTP = Nothing Response.Write "<hr>END" %>
关键修复和注意事项:
- 统一SOAP命名空间:你之前的代码里Envelope用
soap:前缀(SOAP 1.2标准),但Body写成了soap12:Body,这会导致XML结构不合法,现在统一为soap:Body - 指定对象版本:用
MSXML2.ServerXMLHTTP.6.0比旧版本更稳定,能避免很多兼容性问题 - 规范请求头:根据SOAP版本设置正确的
Content-Type,这是很多人容易忽略的点 - 错误处理:添加了错误捕获逻辑,方便你快速定位调用时的问题
- 字符串拼接规范:严格保证每一行的
_紧跟字符串末尾,没有多余空格,确保ASP能正确识别多行拼接的字符串
额外提示:
- 把
aut:YourTargetMethod替换成你实际要调用的WebService方法名 - 替换
aut:Param1等标签为接口要求的参数名称和对应值 - 如果需要身份验证(比如Basic Auth),可以添加
oXmlHTTP.setRequestHeader "Authorization", "Basic " & Base64Encode("用户名:密码")(需要自己实现一个Base64编码函数)
内容的提问来源于stack exchange,提问作者José Cousiño
相关产品推荐
相关产品推荐

