2010-07-20 42 views
0

我是網絡開發的新手,所以我不確定我遇到的問題的最佳選擇是什麼。如何在執行時從Web服務發送狀態信息?

基本上我有一個Web應用程序調用Web服務來處理一些數據。 這個過程可能需要很長時間(小時),我想知道是否有一種簡單的方式可以隨時向客戶發送一些狀態信息。

現在,客戶端從瀏覽器發出請求,它只是在那裏等待,直到完成。

如何從Web服務發送一些信息?我想發送一個百分比和一些額外的文字說明正在做什麼。

謝謝

回答

0

WCF服務可以標記爲[OneWay],以便它們不返回響應。 或者,您可以讓服務以異步方式啓動進程,然後僅返回進程已經/或尚未啓動的客戶端。

然後,客戶端可以輪詢另一個用戶建議的方法。

如果您處理需要幾個小時,您肯定無法使用同步服務,因爲您會遇到執行超時或客戶端的連接超時。

+0

感謝您的信息。我不知道[OneWay]選項。 – LEM 2010-07-21 14:56:49

+0

有關OneWay的疑問是即使您的服務錯誤您不會知道,所以它使輪詢後續步驟變得更加重要。 我想說,如果您很容易從syncronous服務中調度「工作」或異步處理,那麼您將在初始啓動期間同時獲得來自服務的反饋以及運行很長時間在wcf服務中運行進程。 你可以在這裏看到,史蒂夫吉爾姆指出,即使是一個雙工服務可能會做的伎倆:http://stackoverflow.com/questions/1142698/dealing-with-a-longer-running-process-in-wcf – 2010-07-21 15:53:46

+0

再次感謝。我非常感謝你的幫助。 – LEM 2010-07-21 18:05:06

0

也許你可以輪詢另一種方法的狀態?

+0

我該怎麼做?客戶端的執行停止等待Web服務完成。 – LEM 2010-07-20 18:03:31

+0

你可以在通話之前產生一個新的線程進行輪詢,並在獲得結果後將其殺死...... – Marko 2010-07-20 18:23:37

+0

或者也許定時器會更優雅/易於實現... – Marko 2010-07-20 18:33:37

0

如果我是你,我會使原始請求異步,因爲不是等待響應,而是「啓動」任務並立即返回。然後,我會在您的Web服務上有一個單獨的方法,該應用程序可以定期輪詢以獲取該作業的狀態。一旦完成,它就可以像原始請求那樣顯示數據。

如果您想同步執行此操作,可以關閉Response.Buffer並直接寫入響應。

+0

謝謝,我會嘗試這種方式。 – LEM 2010-07-21 14:56:18

相關問題