我已經創建了一個簡單的WCF(.NET 3.5)服務,它定義了10個基本上是對提供的數據進行計算的合同。目前我希望很少的客戶能夠打電話給這些合同。如何讓服務更具響應性?我有一種感覺,那就是服務會一直等到它處理一個請求去下一個請求。 如何在WCF中使用多線程來加快速度?WCF服務和線程
WCF服務和線程
回答
雖然我Justin's answer同意,我相信更多的光可以在這裏闡明WCF是如何工作的。
您做出特別聲明:
我有一種感覺,該服務將 等待,直到它處理一個請求 去下一個。我如何在WCF中使用 多線程來加快 的速度?
服務的併發性(可同時接收多少個呼叫)取決於連接到該服務的ConcurrencyMode
value for the ServiceBehavior
。默認情況下,該值爲ConcurrencyMode.Single
,這意味着它會逐個序列化調用。
但是,這可能不像您想象的那麼嚴重。如果你的服務的InstanceContextMode
等於InstanceContextMode.PerCall
那麼這是一個沒有問題的;您的服務的新實例將在每次通話時創建,並且不會用於任何其他通話。
但是,如果您有一個單例或基於會話的服務對象,那麼對該服務實現實例的調用將被序列化。
您可以隨時更改ConcurrencyMode
,但請注意,如果您這樣做,則必須手動處理併發問題並訪問您的資源,因爲您明確告訴WCF您將這樣做。
重要的是不要因爲你認爲它會導致性能提高而改變這些。雖然併發性並不是很高,但服務的實例化方面非常重要(如果它是會話或不是基於會話的),並且改變它們會影響使用該服務的客戶端,所以不要這樣做它輕輕一點。
當然,這並不涉及實際上實施服務的代碼是否有效。當你指出情況時,這絕對是需要研究的東西。
這絕對是過時的優化。首先實施你的服務,看看是否有問題。
我想你會發現你一無所知。當請求處理時,服務器不會阻塞單個請求。 IIS/WCF應該按照原樣爲你處理事情。
我不熟悉WCF,但可以進程是異步嗎? 如果您期待大量的數據和密集計算,則可以發送一個選項id
,在單獨的線程中計算值,然後提供一種方法,使用初始值id
返回結果。
喜歡的東西:
int id = Service.CalculateX(...);
...
var y = Service.GetResultX(id);
- 1. 2 WCF服務和c#線程
- 2. WCF InstanceContextMode.PerCall服務和多線程
- 3. Spring.net WCF服務和多線程:管理exec WCF方法的線程數
- 4. 來自WCF的Ansync線程RESTful服務
- 5. 工作線程的WCF服務
- 6. 線程問題與WCF服務
- 7. WCF服務不是多線程的
- 8. 從後臺線程調用WCF服務
- 9. WCF服務失速產卵線程
- 10. 工作線程的WCF服務?
- 11. 作爲WCF服務的線程
- 12. 多個線程調用WCF服務
- 13. 線程安全處置WCF服務
- 14. WCF服務,WCF RIA服務和WCF數據服務的區別
- 15. 調用WCF服務和在客戶端和服務端運行的線程
- 16. WCF服務應用程序和WCF服務庫
- 17. WCF服務與ConcurrencyMode.Multiple和InstanceContextMode.Single行爲和多線程安全
- 18. WCF和線程
- 19. WCF監聽服務總線
- 20. 關於WCF服務總線
- 21. Azure服務總線到WCF
- 22. WCF服務工作線程與ServiceHost線程通信
- 23. 遠程WCF服務
- 24. WCF服務和ActiveDirectory
- 25. WCF和Linq服務
- 26. Windows服務/ WCF和線程,初學者問題
- 27. 帶有循環和WCF的Windows服務線程
- 28. 服務,線程和網絡
- 29. Windows服務和多線程
- 30. Android服務,線程和UI
當我說你經歷了緩慢的反應時,我很理解你嗎?客戶打幾次電話可以讓我們說一分鐘。什麼是慢? – 2010-10-19 14:28:23