2012-05-01 1 views
1

У меня есть довольно стандартная функция, чтобы отправлять некоторые данные строки XML в удаленную службу WCF и извлекать результат. Он отлично работает, но не может масштабироваться до «большого» количества данных (138KB в этом случае.)Выдача запроса POST с большим количеством данных завершается с ошибкой в ​​VB6

' performs a HTTP POST and returns the resulting message content 
Function HttpPost(sUrl As String, sSOAPAction As String, sContent As String) As String 
    Dim oHttp As Object 
    'Set oHttp = CreateObject("Microsoft.XMLHTTP") 
    Set oHttp = CreateObject("MSXML2.XMLHTTP.6.0") 
    oHttp.open "POST", sUrl, False 
    oHttp.setRequestHeader "SOAPAction", """http://conducive.com.au/IXpacManagement/" & sSOAPAction & """" 
    oHttp.setRequestHeader "Content-Type", "text/xml; charset=utf-8" 
    oHttp.setRequestHeader "Content-Length", Len(sContent) 
    oHttp.send Str(sContent) 

    If oHttp.status = 200 Then 
    HttpPost = oHttp.responseText 
    Else 
    MsgBox "An error (" & LTrim(Str(oHttp.status)) & ") has occurred connecting to the server." 
    HttpPost = "" 
    End If 

    Set oHttp = Nothing 

End Function 

Когда я использую Microsoft.XMLHTTP я получаю error 7 out of memory.
Когда я использую MSXML2.XMLHTTP.6.0, я получаю object doesn't support this property or method.
В любом случае отправка небольшой строки под тысячей символов работает отлично.


Вот что я получаю, когда я пробовать различные способы отправки строки:

  • Использование oHttp.send(sContent): Даже небольшие заметки завершаться Invalid procedure call or argument Runtime error 5.
  • Использование oHttp.send sContent: Даже небольшие POST-коды не работают с Invalid procedure call or argument Runtime error 5.

В конце oHttp.send CStr(sContent) работал. Спасибо всем за предложения, потому что я был потерян.

+0

Просто комментируйте, чтобы довести до вашего сведения тот факт, что тег vb находится в процессе очистки (см. Бюллетень сообщества). Вы должны заменить его одним из четырех конкретных вариантов, не в последнюю очередь для того, чтобы убедиться, что вы получите помощь, которой вы помогаете! – Zulaxia

+0

Попробуйте использовать промежуточный массив байтов: 'baBuffer = StrConv (...): .send CVar (baBuffer)' – wqw

ответ

2

Попробуйте вывести Str() вокруг sContent и просто используя круглые скобки, чтобы передать его по значению, например.

oHttp.send (sContent)

или если это невозможно, по крайней мере использовать CStr() - Str() предполагается преобразовать числа в строки.

+0

Нет никаких оснований или необходимости использовать круглые скобки вообще. Вы создаете вторую копию большой строки. – Bob77

+0

@Bob: метод 'send' имеет причуду, и он не имеет« как »параметры VT_BYREF, наиболее примечательные, когда вы называете его поздним. – wqw

+0

Я * только * видел, что когда XMLHTTP сам связан с поздним сроком. Но так как это VB6, а не скрипт или что-то, что вы действительно хотите скопировать в любом случае. Если вы этого не сделаете, вы обречены на создание копий данных, насколько я могу судить. – Bob77