2011-02-27 82 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