2011-02-27 32 views
5

我使用netTcpBinding和流將文件從一臺服務器發送到另一臺服務器,如this codeproject文章中所述,據我所知在wcf中,當我們想發送流時,我們應該創建並返回它作爲消息合約,問題是如何完成文件發送?因爲我想從收件箱中移動文件時,文件發送完成保障如何在流式傳輸結束後刪除文件wcf

回答

4

我在這個blog找到很好的解決方案,如果有人需要它在未來

OperationContext clientContext = OperationContext.Current; 
clientContext.OperationCompleted += new EventHandler(delegate(object sender, EventArgs args) 
    { 
     if (fileStream != null) 
     fileStream.Dispose(); 
    }); 
+0

這是我可以跨越的解決方案,並且一開始看起來很棒。但是,它會執行客戶端是否已成功複製流。如果你只是試圖處理資源,這不是問題(事實上,它是完美的)。但是,如果您移動文件,或者更糟糕的是刪除文件,則會出現問題。 – Jeff 2011-05-27 21:27:32

+0

你是對的@Jeff,我發現了後者,你知道另一種方法嗎? – 2011-05-28 10:55:06

2

當第二個服務器完成從第一臺服務器接收文件到發件箱,它可能然後調用另一個Web服務方法,以確認它得到了文件。此時,您可以將文件從收件箱移至發件箱,並保證其他服務器收到該文件。

+0

好,但如果第一個服務器獲取文件的東西,失去了試圖索要移動到收件箱中,當連接?比客戶端將收到文件兩次 – 2011-02-28 06:37:32

+0

你是正確的,在設計可靠的分佈式系統時,你需要考慮到所有類型的場景中的信息丟失,服務器宕機等你將不得不拿出一個設計,手柄這種情況並確保不會創建重複的文件。我不相信WCF中有任何東西可以幫助你自動做到這一點。 – Saeed 2011-02-28 11:47:57

+0

我想我找到了解決方案,檢查我的答案 – 2011-03-01 06:29:38