Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http 在VB6中发出包含大量数据的POST请求失败_Http_Post_Vb6_Msxml_Xmlhttprequest - Fatal编程技术网

Http 在VB6中发出包含大量数据的POST请求失败

Http 在VB6中发出包含大量数据的POST请求失败,http,post,vb6,msxml,xmlhttprequest,Http,Post,Vb6,Msxml,Xmlhttprequest,我有一个非常标准的函数将一些XML字符串数据发布到远程WCF服务并提取结果。它工作正常,但无法扩展到“大”数据量(本例中为138KB) 当我使用Microsoft.XMLHTTP时,我的内存中出现了错误7 当我使用MSXML2.XMLHTTP.6.0时,我得到的对象不支持此属性或方法 在任何一种情况下,发送一个不到1000个字符的小字符串都是完美的 以下是我尝试不同方式发送字符串时得到的结果: 使用oHttp.send(scocontent):即使很小的帖子也会失败,出现无效的过程调用或参数

我有一个非常标准的函数将一些XML字符串数据发布到远程WCF服务并提取结果。它工作正常,但无法扩展到“大”数据量(本例中为138KB)

当我使用
Microsoft.XMLHTTP
时,我的内存中出现了
错误7

当我使用
MSXML2.XMLHTTP.6.0
时,我得到的
对象不支持此属性或方法

在任何一种情况下,发送一个不到1000个字符的小字符串都是完美的


以下是我尝试不同方式发送字符串时得到的结果:

  • 使用
    oHttp.send(scocontent)
    :即使很小的帖子也会失败,出现
    无效的过程调用或参数运行时错误5
  • 使用
    oHttp.send scocontent
    :即使是小帖子也会失败,出现
    无效的过程调用或参数运行时错误5

最后,
oHttp.send CStr(sContent)
。谢谢大家的建议,因为我迷路了。

试着在sContent周围取出Str(),然后用括号按值传递,例如

oHttp.send(内容)


或者,如果没有做到这一点,至少应该使用CStr()-Str()将数字转换为字符串。

只是注释一下,提醒您注意vb标记正在被清理(请参阅社区公告)。您应该将其替换为四种特定变体中的一种,尤其是为了确保您得到所需的帮助!尝试使用中间字节数组:
baBuffer=StrConv(…):。发送CVar(baBuffer)
完全没有理由或需要使用括号。您正在创建一个大字符串的第二个副本。@Bob:
send
方法有一个怪癖,它不“喜欢”VT_BYREF参数,最明显的是在调用它的后期绑定时。我自己只在XMLHTTP后期绑定时见过这种情况。但由于这是VB6,而不是脚本或其他您真正想要提前绑定的东西。如果您不这样做,那么就我所知,您注定要创建数据副本。@Bob:OP正在后期使用它。跳过对MSXMLV42.0的引用在向后兼容(比如win98向后兼容)方面有一些优点。不过,如果您硬编码了一个依赖于版本的ProgId,我不确定后期绑定会给您带来什么。同样,复制和重新复制数据可能会增加CPU和工作集的大小,将这些参数加在一起会产生一个副本。MSXML4已经过时了,我所看到的一切都建议使用MSXML6,如果您需要底层兼容性,则建议使用ELS3。
' 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