2014-01-15 6 views
0

PayPal의 PayFlowPro에 연결하여 반복되는 결제 가입 내에서 사용되는 신용 카드를 업데이트하는 코드가 있습니다. 이 코드는 .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 

혼란스러운 부분은 항상 어떤 간헐적으로 작동합니다 디버그하기가 가장 힘듭니다. 이것은 수년 동안 존재 해 왔던 유일한 차이점이며, 유일한 차이점은 현재 닷넷 4와 닷넷 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()