2012-02-06 35 views
1

我已經在谷歌應用程序引擎上構建了一個應用程序,在python27中與另一個服務API進行連接,並且一般情況下一切正常。時不時地,我得到以下兩個錯誤之一ApplicationError2和ApplicationError5與AppEngine的外部API進行通信

(<class 'google.appengine.api.remote_socket._remote_socket.error'>, error('An error occured while connecting to the server: ApplicationError: 2 ',), <traceback object at 0x11949c10>) 

(<class 'httplib.HTTPException'>, HTTPException('ApplicationError: 5 ',), <traceback object at 0x113a5850>) 

首先這些錯誤(的ApplicationError:2)的解讀是在與我通信的服務器的部分發生的錯誤,但是我沒有找到任何細節,如果有什麼方法我負責/可以解決它。

這些錯誤中的第二個(ApplicationError:5)我發現了一些細節,它表明服務器花了太長時間與我的應用程序進行通信 - 但是我已經將超時設置爲20秒,並且顯着失敗比那更快。

如果任何人都可以提供鏈接或洞察錯誤 - 具體是什麼原因造成的錯誤和可以做些什麼來解決它,我非常感謝它。

+0

連接的另一端可能已關閉連接或類似的東西。 – max 2012-02-07 06:04:26

+0

你能分享一些代碼和一個公共URL來重現這個問題嗎? – proppy 2012-02-07 14:39:43

+0

這些調用被隱藏在相當多的不可發佈的代碼中,「清理」將是一項相當繁重的工作。我真的想了解爲什麼會出現這種情況 - 這些錯誤的常見原因以及是否有任何簡單的勝利來克服這些錯誤。 – user714852 2012-02-08 13:00:47

回答

1

你到開始在閒談用的是「冪等」,並詛咒:)

你能做的唯一一件事就是再次嘗試呼叫,並接受這樣的事實,你的初始呼叫可能已經走過了,只是爲了超時響應 - 即如果調用實際上做了某事(例如創建一個客戶訂單),在超時錯誤之後,您可能需要檢查第一個請求是否成功,以便最終不會得到多個副本相同的順序。

希望是有道理的。 FWIW我們使用了一些不友好的API,對我們來說,我們大約80%的代碼正在處理這種!@#$%。

+0

我目前的策略是再次嘗試呼叫 - 有時會有效,有時不會。這是麻煩的一部分 - 似乎沒有任何規則或機制來確定通話是成功還是失敗。 – user714852 2012-02-08 12:57:55

+1

這不是一個好主意。你的呼叫可能已經成功了,如果呼叫是創建一個對象,例如一個文件夾,它現在存在。你的第二個電話將創建第二個文件夾。這很可能是不可取的。 – 2012-05-07 01:35:02

+0

好點,我一定會檢查一下,看看我以前的通話是否成功。 – user714852 2012-05-30 19:14:20

相關問題