vbscript - 如何使用Request.BinaryRead(Request.TotalBytes)

时间:2015-07-17 07:32:18

标签: web-services vbscript asp-classic domdocument

我必须使用以下经典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.BodyobjDomDoc.loadXML(binRequest)。我必须使用给出的VBScript代码。

编辑:
忘了提我正在使用.NET 2.0

3 个答案:

答案 0 :(得分:3)

.load从位置/网址读取数据。使用.loadXML从字符串中读取。

第二个想法:

您需要将从.BinaryRead返回的SafeArray转换为String。

第三个想法:

即使您发布了URL,也必须在VBScript代码中转换为.load所需的字符串。

答案 1 :(得分:0)

P.S。你的两个代码对我都很好。

首先,Request.BinaryRead永远不会返回Empty,但可能会导致错误。看起来代码中的On Error Resume Next某个位置出现了错误,并且该值无法分配给 binRequest ,因此您拥有Empty。错误必须与以下内容相关。

来自Request.BinaryRead Method

  

BinaryRead方法用于读取客户端发送的原始数据   作为POST请求的一部分。此方法用于低级访问   这个数据,而不是,例如,使用Request.Form   集合以查看POST请求中发送的表单数据。 你有   使用BinaryRead,引用Request.Form中的任何变量   收集会导致错误。 相反,在您提到之后   Request.Form集合中的变量,使用BinaryWrite会导致   错误。请记住,如果您访问Request集合中的变量   在没有指定它属于哪个子集合的情况下,Request.Form   可以搜索收集,使这条规则生效。

答案 2 :(得分:0)

我想你可以这么做:

objDomDoc.load Request

其中objDomDocMSXML2.DOMDOCUMENT的实例,Request是ASP经典的内置请求对象。