2012-03-23 62 views
1

我有一個當前調用Java WebService的ASP.NET Webform。 ASP.NET Webform是內部創建/維護的,而Java WS是一個包解決方案,我們只有應用程序的WS接口。ASP.NET WebService調用排隊

問題是,由於系統負載等原因,Java WS有時響應速度慢,並且我無能爲力。因此,目前,如果Java-WS響應速度慢,有時會導致ASP.NET達到其超時值並拋出連接,但有時ASP.NET Webform有時會出現很長時間的延遲。

我需要確保這兩個應用程序之間的數據連接,我可以通過增加超時值來做到這一點,但我不能讓ASP.NET窗體等待幾秒鐘。

這就是排隊系統的想法到位的地方。

我的想法是,讓ASP.NET表單構建肥皂請求,然後將其排入本地隊列中,然後Daemon運行並在Java-WS中觸發請求。

在我從頭開始構建一些東西之前,我需要一些指針。

  1. 我的解決方案是否可行?
  2. 是否有任何庫等已經在那裏,我可以實現此功能?
  3. 有沒有更好的方法來實現我在找什麼?
+1

你還在使用ASMX網絡服務嗎?這是一項傳統技術,您應該使用WCF來代替。 – 2012-03-23 16:00:49

+2

他沒有使用ASMX。它是一個調用Java Web服務的Web窗體。話雖如此,你有沒有考慮異步調用Java Web服務。 – 2012-03-23 16:05:10

+1

@William yes已經考慮到了這一點,但是一旦請求被引發到Web服務異步,Web窗體關閉並且用戶返回到調用系統,所以如果你沒有一個回調實例返回得到我。 – 2012-03-23 16:15:33

回答

2

你有兩個不同的問題:

  1. 你的Web表單需要學會發送到服務,後來調查的請求,以獲得該服務的結果。你可以通過編寫一個簡單的中間服務(請在WCF中)來做到這一點,它有兩個操作:一個用於異步調用Java服務,另一個用於查明異步調用是否已完成,並返回結果。
  2. 您可能需要持久地將請求排隊到Java服務。要做到這一點,最簡單的方法是,如果性能不是最關心的問題(似乎不是),則將#1中間服務分成兩部分:一部分使用WCF MSMQ綁定調用另一半。這將透明地使用MSMQ作爲傳輸,導致排隊的請求留在隊列中,直到它們被下半部分拉出。後半部分將作爲Windows服務寫入,以便在系統啓動時啓動並開始清空隊列。
+1

在第1行中,你說「後來輪詢以獲得該服務的結果」我並不真正希望輸入表單關心結果是什麼,但我需要一些照顧,可能是窗口內置的某種報告守護程序服務,或寫入事件日誌等 – 2012-03-23 19:22:02

+1

這將與WCF很好地工作。 – 2012-03-23 21:41:56

+1

關於學習WCF的一些好書的任何指針?學習WCF,Michele Leroux的動手指南? – 2012-03-24 09:28:52

2

您可以使用MSMQ排隊來自客戶端的請求。 請注意,MSMQ不能爲您處理任何事情 - 這只是一種交通工具。

它所要做的就是取MSMQ消息並將它們傳遞給MSMQ隊列。

創建原始消息和處理髮送的消息都是在您自己的發送和接收機器代碼中處理的:目標機器必須安裝MSMQ以及運行自定義服務才能接收它們並處理它們

反正有使用JAVA與MSQM互操作一個librays:http://msmqjava.codeplex.com/

另一種方式可能是你可以在你的Windows中的一個創建隊列,然後是拿起消息創建服務形成排隊並將它們推向Java服務

+1

你需要Windows在這兩個方面雖然??? – 2012-03-23 13:49:09

+1

目標機器必須安裝MSMQ加上運行的自定義服務來提取並處理它們 無論如何,有一個用於與MSQM使用JAVA互操作的庫l http://msmqjava.codeplex.com/ – 2012-03-23 13:49:48

+1

這不是一個選項。我所擁有的唯一入口點是一個WebService接口。我無法在目標服務器上安裝任何內容。 – 2012-03-23 13:51:55

3

您可以create a WindowsService hosting a WCF service

您的網絡應用程序可以讓他們調用您的Windows服務的WCF方法。

您的Windows服務可以異步調用Java Web服務方法,使用 begin/End pattern

您的Windows服務,甚至可以存儲Java Web服務的答案,並通過另一個WCF方法揭露他們。例如,你可以在你的WCF服務這個方法:

1),允許inderectly調用Java Web服務和returnd標識該呼叫

2)返回Java Web服務的另一種方法一種方法通過顯示呼叫的標識符來呼叫結果

您甚至可以使用AJAX調用Windows服務的WCF方法。

+1

由於他正在尋找一個隊列,通過在數據庫中引入一個隊列表,可以進一步解決這個問題。 – 2012-03-23 16:21:48

+1

如果他只是想確保處理對java web服務的調用,可能不需要。 Windows服務可以安全地執行此操作,而無需使用隊列。 – JotaBe 2012-03-23 18:20:28