我必须使用以下经典ASP VBScript代码:
binRequest = Request.BinaryRead(Request.TotalBytes)
Set objDomDoc = Server.CreateObject("Msxml2.DOMDocument.4.0")
bGoodXml = objDomDoc.load(binRequest)
此代码应该接收将转换为xml的内容。
我在C#中使用以下代码将带有xml的请求发送到包含上面列出的代码的页面:
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
string postData = getXML();
byte[] data = Encoding.ASCII.GetBytes(postData);<br/>
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = postData.Length;
using (Stream stream = req.GetRequestStream())
{
stream.Write(data, 0, postData.Length);
}
return "200";
和
private string getXML()
{
return "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>" +
"<MessageHeader>" +
"<ApplicationNo>" +
"1325447" +
"</ApplicationNo>" +
"</MessageHeader>";
}
问题是在VBScript代码Request.TotalBytes
中有一个值(112),Request.Body包含xml但Request.BinaryRead(Request.TotalBytes)
返回Empty而bGoodXml
为False。
难道我做错了什么 ?我发送的数据不正确吗?不,我不能使用Request.Body
或objDomDoc.loadXML(binRequest)
。我必须使用给出的VBScript代码。
编辑:
忘了提我正在使用.NET 2.0
答案 0 :(得分:3)
.load从位置/网址读取数据。使用.loadXML从字符串中读取。
第二个想法:
您需要将从.BinaryRead返回的SafeArray转换为String。
第三个想法:
即使您发布了URL,也必须在VBScript代码中转换为.load
所需的字符串。
答案 1 :(得分:0)
P.S。你的两个代码对我都很好。
首先,Request.BinaryRead永远不会返回Empty
,但可能会导致错误。看起来代码中的On Error Resume Next
某个位置出现了错误,并且该值无法分配给 binRequest ,因此您拥有Empty
。错误必须与以下内容相关。
BinaryRead方法用于读取客户端发送的原始数据 作为POST请求的一部分。此方法用于低级访问 这个数据,而不是,例如,使用Request.Form 集合以查看POST请求中发送的表单数据。 你有 使用BinaryRead,引用Request.Form中的任何变量 收集会导致错误。 相反,在您提到之后 Request.Form集合中的变量,使用BinaryWrite会导致 错误。请记住,如果您访问Request集合中的变量 在没有指定它属于哪个子集合的情况下,Request.Form 可以搜索收集,使这条规则生效。
答案 2 :(得分:0)
我想你可以这么做:
objDomDoc.load Request
其中objDomDoc
是MSXML2.DOMDOCUMENT
的实例,Request
是ASP经典的内置请求对象。