2013-08-12 76 views
1

我最近升級WSO2 ESB到4.7版本的Windows Server 2008 R2和遇到下一個錯誤,而只是進行代理SOAP請求到端點:WSO2 ESB未知錯誤代碼102511

接收響應,而處理器處於不一致的狀態REQUEST_HEAD

ERROR_CODE : 102511 
ERROR_MESSAGE : Error in Sender 
ERROR_DETAIL : Error in Sender 
ERROR_EXCEPTION : null 

事情是,這個錯誤代碼沒有在文檔中描述,沒有例外,它是不明顯的。我能找到的最接近的代碼是SND_INVALID_STATE = 102510,並且從源代碼看來,請求帶有無效標頭。但並非所有請求都失敗了。相同的請求可以隨機通過或失敗。我用提琴手記錄了所有請求並重播了它們。失敗者最終可以通過,反之亦然。在此之前,我在本地計算機(Windows 7)上部署和測試了新版本的ESB,並且僅在冷啓動時遇到此類錯誤。

最簡單的配置重現它包括路徑通過代理服務和地址端點。

代理服務配置:

<?xml version="1.0" encoding="UTF-8"?> 
<proxy xmlns="http://ws.apache.org/ns/synapse" name="TestEP" transports="http" statistics="disable" trace="enable" startOnLoad="true"> 
    <target endpoint="TestEP"> 
     <outSequence> 
     <send/> 
     </outSequence> 
    </target> 
    <description/> 
</proxy> 

地址端點描述

<endpoint xmlns="http://ws.apache.org/ns/synapse" name="TestEP"> 
    <address uri="http://mydomain.test/SystemServices.asmx"> 
    <syn:suspendOnFailure> 
     <syn:initialDuration>0</syn:initialDuration> 
     <syn:progressionFactor>1.0</syn:progressionFactor> 
     <syn:maximumDuration>0</syn:maximumDuration> 
    </syn:suspendOnFailure> 
    </address> 
</endpoint> 

有其他人遇到此錯誤或知道如何處理呢?對於有關情況的任何見解,我將不勝感激。

更新:
看來爲什麼請求失敗的原因是在請求HTTP標頭

Expect: 100-continue 

選項。當我創建一條規則在小提琴手中刪除它時,所有查詢都成功了。目前還不清楚在WSO2 ESB方面是否有辦法處理此類行爲,或者是否應移除標題的這一部分。

+0

我在調用WSO2 ESB後面的服務時遇到了請求失敗的問題。刪除「期望:100-繼續」解決了這個問題。 –

回答

1

從WSO2 ESB 4.5.1升級到4.7.0時,我今天遇到此問題。我遇到了4.5.1的另一個問題,那就是我必須升級,所以在遇到4.7.0的這個問題時,我別無選擇,只能解決它。

思考了一段時間之後,我記得在4.6.0中默認傳輸從NHTTP切換到了Passthrough,以提高性能。 4.7.0提供兩種配置,但默認情況下啓用PT。該配置文件是在Axis2的目錄:

${carbon.home}/repository/conf/axis2/ 

的PT配置文件是axis2_pt.xml。 NHTTP之一是axis2_nhttp.xml。你可以區分它們以瞭解變化的情況。差異很幸運很乾淨。

您可以輕鬆地從PT通過修改主配置文件切換到NHTTP:

${carbon.home}/repository/conf/carbon.xml 

有你有<Axis2Config><ConfigurationFile>元素。默認文件axis2.xml似乎或多或少是axis2_pt.xml的副本。要切換到NHTTP,只需將<ConfigurationFile>更改爲${carbon.home}/repository/conf/axis2/axis2_nhttp.xml即可。

切換到NHTTP解決了我的問題,ESB 4.7.0沒有正確處理100 CONTINUE。具體來說,我試圖通過ESB將curl上傳到另一個服務。使用PT,它失敗了;使用NHTTP,它工作得很好。我明顯的結論是,PT在這種情況下只是一個錯誤。

從我對PT和NHTTP所做的解讀中,從一個切換到另一個的唯一「官方」副作用是PT在某些情況下應該更快。然而,NHTTP已經存在了更長的時間,因此只需經過更多的錯誤修復就可以變得更加穩固。我不確定這一點,因爲我沒有參與WSO2 ESB的開發,但這是一個有教養的猜測。 :)

另外我想評論Isuru Perera的回答,但我沒有必要的聲譽,所以我害怕我不得不把我的兩美分https://wso2.org/jira/browse/APIMANAGER-1007在這裏。這個問題確實看起來確實相關 - 特別是基於我今天在捲曲方面的經驗 - 但不幸的是,WSO2的友善人士在最終建議避免使用捲曲的許多評論之後將問題解決爲「不是bug」,因爲其他客戶端「按預期工作」,從而使這成爲「捲曲問題」。根據符合HTTP規範的請求破壞行爲的恕我直言不是一個客戶端問題,應該解決。這有效地使得PT傳輸在某些情況下不可用 - 即客戶端對於如何POST大型主體更聰明一點的情況。這真是一個恥辱,因爲不需要解析請求體的場景正是PT傳輸設計的目的,以及它應該擅長的地方!

哦,這是我在stackoverflow上的第一篇文章,所以我很抱歉,如果我違反了任何家庭規則;一段時間以來我一直是被動的參與者,所以我希望我沒有做錯任何事情!

+0

謝謝博揚。 Passthru-http協議確實有點奇怪。我們最終從SOAP服務的端去除了'Expect:100-continue'標題。但是在使用它進行負載測試時,我們也遇到了突發線程池飢餓問題,當沒有備用的SynapseWorkers處理http請求時。難怪WSO2建議再次將worker_pool_size_core設置爲400,默認值爲20.看來我們現在將回到nhttp。對不起,延遲與答覆,你的答案是一個很大的幫助。 – user2547004