2012-04-15 65 views
2

我已經實現了一個相當簡單的wcf服務,它處理從客戶端到服務器的文件傳輸問題,即客戶端發送文件請求時的問題。 所有帶寬都分配給該單個客戶端,其他客戶端必須等到請求的文件傳輸完成。 所以我的問題是如何讓更高效的服務,讓用戶共享WCF中的併發管理

[ServiceBehavior(IncludeExceptionDetailInFaults = true, InstanceContextMode =InstanceContextMode.PerCall, 
    ConcurrencyMode=ConcurrencyMode.Multiple)] 

我的InstanceContextMode屬性設置爲PerCall,但沒有這樣的伎倆

更新帶寬:這是Project與我的類似 http://www.codeproject.com/Articles/33825/WCF-TCP-based-File-Server

回答

4

值得懷疑的是,通過WCF端點提供文件是可取的。反對這樣做的原因幾乎就是你遇到的問題。它一次適用於少數客戶端 - 但擴展需要在負載平衡器後託管新服務實例。

這將是值得考慮託管您的文件與某種存儲服務,並讓您的WCF服務只是返回一個鏈接或句柄的文件。然後可以離線檢索文件。 Microsoft爲此確切目的創建了Azure Blob Storage

請注意,這並不能解決您的原始問題,並且瞭解您的要求的範圍可能無法適應大的返工。

+0

謝謝@hugh,我沒有時間在項目的這個階段改變系統,但是如果我打算改變文件管理系統你的建議是什麼? 我在想FTP服務器: - ? – Andy 2012-04-16 14:00:45

+0

FTP是粗略但有效的。說實話我沒有像這樣實現文件共享。我們正在Azure上託管我們的服務,所以我知道這個blob存儲策略。 – 2012-04-16 14:07:41

5

WCF沒有適當的負載平衡,您將不得不自己開發一個。 如果你正在傳輸文件,讓我們假設下載,你應該立即發送數據包而不是整個文件。當這樣做時,在進程中添加「延遲/睡眠」以限制服務器在每個時間窗口發送的字節數量,這將爲其他請求留出空間。

+1

我期待一個更簡單的解決方案......但無論如何感謝 – Andy 2012-04-15 15:28:15

1

如果您正在傳輸大型文件,另一個選擇是使用分塊通道。示例:MSDNcodeplex

雖然我同意@hugh的立場。