2014-01-15 3 views
0

У нас есть код, который запускается для подключения к PayFlowPro PayPal для обновления кредитной карты, используемой в рамках повторяющейся подписки на выставление счетов. Этот код использовался для работы в рамках пула приложений .Net 2, но когда мы перенесли его на 4.0, это очень обидно - иногда это работает, а в других случаях это не так. Код кажется довольно простым, поэтому я не уверен, в чем проблема.PayPal PayFlowPro COMException 0x8000000A

Ошибка: 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 все еще не исправлена. Он работал, а затем снова остановился. Это не имеет никакого смысла.

ответ

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()