Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在流媒体wcf结束后删除文件_C#_Wcf_Wcf Streaming - Fatal编程技术网

C# 如何在流媒体wcf结束后删除文件

C# 如何在流媒体wcf结束后删除文件,c#,wcf,wcf-streaming,C#,Wcf,Wcf Streaming,我使用netTcpBinding和streaming将文件从一台服务器发送到另一台服务器,如codeproject文章中所述,正如我在wcf中所理解的,当我们想要发送流时,我们应该创建并将其作为消息契约返回,问题是如何完成文件发送?因为我想在文件发送完成时将文件从收件箱移动到发件箱当第二台服务器从第一台服务器接收完文件后,它可以调用另一个web服务方法来确认它已获得该文件。在这一点上,您可以将文件从收件箱移动到发件箱,并保证其他服务器收到它。如果将来有人需要它,我发现了一个很好的解决方案 Ope

我使用netTcpBinding和streaming将文件从一台服务器发送到另一台服务器,如codeproject文章中所述,正如我在wcf中所理解的,当我们想要发送流时,我们应该创建并将其作为消息契约返回,问题是如何完成文件发送?因为我想在文件发送完成时将文件从收件箱移动到发件箱

当第二台服务器从第一台服务器接收完文件后,它可以调用另一个web服务方法来确认它已获得该文件。在这一点上,您可以将文件从收件箱移动到发件箱,并保证其他服务器收到它。

如果将来有人需要它,我发现了一个很好的解决方案

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

很好,但是如果第一台服务器获取了文件,并且在试图请求移动到收件箱时失去了连接,该怎么办?如果你是正确的,在设计一个可靠的分布式系统时,你需要考虑所有类型的消息丢失、服务器宕机等情况。你必须想出一个设计来处理这种情况,并确保不创建重复的文件。我不相信WCF中有任何东西可以帮助您自动完成这项工作。我想我找到了解决方案,请检查我的答案。这是我能够理解的解决方案,一开始看起来确实很棒。但是,它执行客户端是否成功复制了流。如果您只是试图处理资源,这不是问题(事实上,它非常适合这样做)。但是如果你正在移动文件,或者更糟的是,删除它,这是一个问题。是的,你是对的@Jeff,我发现了deffect later,你知道另一种方法吗?