2015-07-17 1 views
1

Я следующий код Классический ASP VBScript, который я должен использовать:VBScript - Как использовать Request.BinaryRead (Request.TotalBytes)

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, который указан.

Edit:
забыл упомянуть, я использую .NET 2.0

+0

VBScript, который вы опубликовали, представляет собой классический ASP-серверный код (который использует VBScript), простой ванильный VBScript не будет иметь доступа к объекту 'Request'. – Lankymart

ответ

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 приведет к ошибке . Помните, что если вы обращаетесь к переменной в коллекции запросов , не указав, к какому субколлекции принадлежит, запрос.Форма можно найти в коллекции, введя это правило в силу.

+0

Hello Kul-Tigin. Я обновил свой код выше, чтобы показать оператор возврата. Это утверждение ударяется, поэтому я предполагаю, что в исполняемом коде отсутствуют ошибки. Можете ли вы дать мне образец кода, который вы использовали для отправки данных? Это точно такой же код? –

+0

Да, это так. Три строки ASP и код C#. Получение '112' для' Request.TotalBytes' означает, что C# тоже работает для вас. –

+0

Возможно ... но Request.ReadBytes (Request.TotalBytes) не работает. Таким образом, данные передаются с C# (Request.Form содержит то, что мне нужно), возможно, оно не отформатировано правильно? –

3

.load считывает данные из местоположения/URL. Используйте .loadXML для чтения из строки.

На второй мысли:

Вам нужно преобразовать SafeArray вернулся из .BinaryRead в строку.

На третьей мысли:

Даже если вы разместите URL, преобразование в строку, которая .load потребности должно быть сделано в коде VBScript.

+0

Я не могу изменить код vbscript, только код C#. Есть ли способ изменить это? Возможно, разместите местоположение файла xml или что-нибудь еще, что Request.ReadBinary (Request.TotalBytes) вернет действительное значение для objDomDoc.load? –

+0

Я попытался опубликовать путь в запросе, но Request.BinaryRead все равно ничего не возвращает. Мне нужен способ сделать веб-сервис, написанный на C#, чтобы сделать запрос на страницу vbscript и Request.BinaryRead. –

+1

+1 @ Ekkehard.Horner [.load] (https://msdn.microsoft.com/en-us/library/ms762722%28v=vs.85%29.aspx) может считывать данные из SAFEARRAY байтов не только location/URL, посмотрите описание 'xmlSource [in]'. И @ PestreaRadu-Constantin оба из ваших кодов просто сработали для меня. У меня есть теория о проблеме, я отвечу через несколько часов. –

0

Я полагаю, вы можете просто сделать это:

objDomDoc.load Request 

Где objDomDoc является экземпляром MSXML2.DOMDOCUMENT и Request это аспида классика встроенный объект запроса.