2013-07-11 78 views
0

我被賦予了爲Web服務創建基於Web的客戶端的任務。如何處理來自Web服務的異步響應

我開始在c#中構建它| .net 4.0 | MVC3(我可以使用4.5如果有必要)

聽起來像一塊蛋糕,直到我發現他們的一些反應將是異步的。這是流程...你調用一個方法,並且他們返回ack或nack的響應,讓你知道你的請求是否有效。一旦ack響應,您應該期望對您請求的數據進行異步響應,這將發送到您在請求中提供的回調url。

這裏是我的問題:

  1. 如果我建立在本地主機上的web應用程序和調試:{}端口編號我怎麼可以給他們一個回調URL。

  2. 如果我已經收到答覆(ack/nack),並且我的函數完成了解僱並不是我與客戶端的連接,那麼結束了嗎?我將如何將數據返回給客戶端?我唯一的想法可能是使用像signalR這樣的東西,但對於客戶購買流程來說這似乎很瘋狂。

  3. 我是否必須像webhook一樣對待他們的迴應?建立一個單獨的,只是監聽,並不知道最初的請求。只需將數據保存到數據庫,然後有while循環的初始請求,直到有從網絡掛接發送的唯一ID的記錄....奧耶合租

這確實有我的大腦傷害: -/

任何幫助將不勝感激。文章,最佳實踐,任何事情。

在此先感謝。

回答

0

如果您創建服務引用,它將生成* ServiceMethod * Completed委託。註冊一個事件處理程序來處理您的數據。

使用ServiceMethod _Async()方法調用該服務。

0

我認爲你的問題的方法如下,但請糾正我,如果我錯了這一點:

1)你發送一個請求到他們的端點充滿了你的數據參數。此外,您發送了:

您在請求中提供的回叫網址。 (從你的問題引述)

2)他們(希望)發送一個ACK爲您有效的請求

3)他們最終完成數據發送到你的回調URL(您指定)。

如果這是流量,這並不罕見,特別是如果他們身邊的操作可能需要很長時間。所以,假設您有一些方法,我們將其稱爲HandleResponse(數據)。如果你原本打算同步這樣做,這在網絡世界很少發生,你可能會稱之爲HandleResponse(http-webservice-call-tothem);

相反,因爲他們正在啓動對HandleResponse的調用,所以您需要在Web應用程序中設置一個路線,例如/ myapp/givemebackmydata/{data}並將其綁定到HandleResponse。然後,您將它們的callbackurl指定爲/ myapp/givemebackmydata/{data}。請記住,如果沒有更多信息,我不能說它們是否將它作爲POST請求的主體發送給您的處理程序,或者它們是否會將字符串的一部分替換爲實際數據,在這種情況下,您需要將您的回調網址中的{data}替換爲他們在文檔中規定的任何佔位符。他們有文件嗎?如果他們不這樣做,這些都不會幫助那麼多。

最後,爲了將數據返回到客戶端,您可能需要在您的Web客戶端中進行某種輪詢循環,最好是通過AJAX。這將在setInterval上運行,並週期性地在您的服務器上的某個頁面上保存狀態,以確定他們的webservice是否調用了您的回調URL。這是最重要的部分,因爲您需要爲每個請求提供狀態,因爲多個人可能正在等待回調,並且每個回調URL都會映射到其中一個等待的客戶端。 GUID可能對此很有幫助。

有趣的問題,順便說一下。