2009-10-07 70 views
3

我有一個C#桌面應用程序,並且我沒有任何問題地使用Web服務(通過添加服務引用添加了wsdl,因此我創建了一個對象並調用它的函數)。如何在C#中做一個長輪詢客戶端?

現在,我想使用長輪詢技術,但我不知道如何從客戶端的角度來做這件事。

如何配置超時? 我應該使用專用於此的線程嗎? C#桌面應用程序是否有任何示例? (沒有發現任何)

感謝, 大壩的

回答

4

您應該能夠配置Web服務對象的超時 - 細節將取決於正是它的使用哪一類,但看看WebClientProtocol.Timeout一個例。

現在你既可以同步調用,從一個專門的線程,或者你可以做一個異步調用Web服務入手,指定一個回調來執行(可能在一個線程池線程),當服務回覆。在這種情況下,您可能會發現您可以在異步調用本身上指定超時時間 - 同樣,它將完全取決於您獲得的Web服務代理類的類型。

這樣你就不需要「浪費」一個只等待響應的線程 - 但是你可能會發現異步編程模型比同步編程模型更難理解。如果您一次只有一個或兩個這樣的請求,那麼額外的幾個線程不太可能成爲問題。如果您正在等待來自500個不同服務的響應,那麼這是一個不同的問題,異步模式肯定會成爲一種方式。

+0

謝謝您的回覆。 我試過WebClientProtocol.Timeout,但我不知道該如何處理它。我的代碼基本上是: ServiceReference1.TestSOAPImplClient test = new ServiceReference1.TestSOAPImplClient(); label1.Text = test.helloworld(); 並沒有超時屬性。我試圖將它添加到生成的reference.cs中,但沒有結果。 我認爲這是一個基本的步驟中缺少的地方:) (順便說一句,遠程Web服務在Java的製造) 對於線程問題,我只會有2個或3個長輪詢要求最高,所以我會去同步現在用線程。 – 2009-10-07 12:24:09

+0

TestSOAPImplClient派生自哪一類? – 2009-10-07 12:31:28

+0

在reference.cs中,我有:[System.Diagnostics.DebuggerStepThroughAttribute()] [System.CodeDom.Compiler.GeneratedCodeAttribute(「System.ServiceModel」,「3.0.0.0」)] public partial class TestSOAPImplClient:System.ServiceModel .ClientBase ,WS_Client_Test1.ServiceReference1.TestSOAPImpl 。 TestSOAPImpl是一個接口並且從無到有。所有這些都是自動生成的,也許這不是使用網絡服務的最佳方式...... :) – 2009-10-07 12:50:39

1

對於線程問題,請參閱Jon的答案。

對於超時問題,下面是解決方案: 在vs 2008中,當我從wsdl添加「服務引用」時,默認情況下會使用WCF,並且我無法找到如何設置超時值它。

所以,當右鍵單擊服務引用時,我必須選擇「網站引用」(高級/添加Web引用)。這樣,它將只使用「普通」Web服務,並且Timeout參數可用。

相關問題