我有一个相当标准的函数,可以将一些xml字符串数据发布到远程wcf服务并提取结果。它工作正常,但无法扩展到“大量”数据(本例中为138kb)。
' 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
。在这两种情况下,发送一个小于1000个字符的小字符串都能很好地工作。
以下是我尝试不同方式发送字符串时得到的结果:
使用
oHttp.send(sContent)
:即使是很小的帖子也会因Invalid procedure call or argument Runtime error 5
而失败。使用
oHttp.send sContent
:即使是很小的帖子也会因Invalid procedure call or argument Runtime error 5
而失败。最后
oHttp.send CStr(sContent)
成功了。谢谢大家的建议,因为我迷路了。 最佳答案
试着去掉scontent周围的str()并使用括号按值传递它,例如。
发送(内容)
否则至少应该使用cstr()-str()将数字转换为字符串。