You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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能正确识别多行拼接的字符串

额外提示:

  1. 把aut:YourTargetMethod替换成你实际要调用的WebService方法名
  2. 替换aut:Param1等标签为接口要求的参数名称和对应值
  3. 如果需要身份验证(比如Basic Auth),可以添加oXmlHTTP.setRequestHeader "Authorization", "Basic " & Base64Encode("用户名:密码")(需要自己实现一个Base64编码函数)

内容的提问来源于stack exchange,提问作者José Cousiño

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:13:31