PayPal PayFlowPro COMException 0x8000000A

时间:2014-01-15 20:26:25

标签: vb.net paypal comexception winhttprequest

我们有一些代码可以连接到PayPal的PayFlowPro来更新定期结算订阅中使用的信用卡。此代码曾经在.Net 2应用程序池下正常工作,但是当我们将它迁移到4.0时,它非常敏感 - 有时它可以工作,有时则不然。代码看起来非常简单,所以我不确定问题是什么。

错误是:System.Web.HttpUnhandledException (0x80004005): Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.Runtime.InteropServices.COMException (0x8000000A): The data necessary to complete this operation is not yet available.

间歇性失败的代码块(但用于在旧服务器上运行)是:

Try
objWinHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
objWinHttp.Open("POST", GatewayHost, False)
objWinHttp.setRequestHeader("Content-Type", "text/namevalue") ' for XML, use text/xml
objWinHttp.SetRequestHeader("X-VPS-Timeout", "90")
objWinHttp.SetRequestHeader("X-VPS-Request-ID", requestID)

objWinHttp.Send(parmList)
 Catch exc As Exception

 End Try

 ' Get the text of the response. (DIES ON LINE BELOW)
 transaction_response = objWinHttp.ResponseText

令人困惑的部分是它间歇性地工作,这总是最难调试。这已存在多年,唯一的区别是我们的应用程序池现在在.Net 4和.Net 2.0下运行,但我认为这不会是一个问题。我把它翻回2.0,现在它完美无缺。

任何关于从何处开始寻找的猜测? WinHttp.WinHttpRequest.5.1在.Net 4中有问题吗?旧服务器是2008 R2,新服务器是2012 R1,所以也许这也是它的一部分?

更新 - 更改为2.0仍然无法解决问题。它正在工作,然后再次停止。这没有任何意义。

1 个答案:

答案 0 :(得分:0)

由于这是内联.Net代码(未编译),我只是将其迁移到System.Net.HttpWebRequest,而这似乎更好。以下是其他任何人的示例代码:

Dim data As Byte() = New System.Text.ASCIIEncoding().GetBytes(parmList)
Dim request As System.Net.HttpWebRequest = CType(System.Net.HttpWebRequest.Create(GatewayHost), System.Net.HttpWebRequest)
request.Method = "POST"
request.ContentType = "text/namevalue"
request.ContentLength = data.Length

Dim requestStream As System.IO.Stream = request.GetRequestStream()
requestStream.Write(data, 0, data.Length)
requestStream.Close()

Dim responseStream = New System.IO.StreamReader(request.GetResponse().GetResponseStream())
transaction_response = responseStream.ReadToEnd()
responseStream.Close()