我正在重新设计我继承的一个应用程序,它将数码照片从笔记本电脑发送到网络服务器。这个想法是在“现场”拍摄照片并立即将它们发布在网页上(具有一些更花哨的功能)。
典型场景
1. 使用标准 USB 将照片从相机传输到笔记本电脑。
2. 照片经过多种处理。 (不重要)
3. 每张照片都使用 webrequest 以小块(每张约 64 kb)发布到标准的 Apache web 服务器,在那里它们再次合并在一起。
当前设计的问题在于,当网络连接不可靠时,它经常挂起。由于我们使用的是移动网络 (3G) 并且经常无法覆盖,我需要一种方法来正确处理这个问题。
我的问题是是否有更好的解决方案来执行此操作,当连接时不时断开时不会使应用程序挂起。
(额外的问题是如何正确地进行单元测试,而不必带着笔记本电脑远足。)
编辑 2008-11-24:
我现在已经设法使用 NetLimiter 和 TMnetsim(免费软件)的组合为此设置了适当的测试环境。我尝试设置 5 kb/sec 并丢弃所有数据包的 1% - 我的应用程序仍然适用于新设计。
编辑 2008-12-11:
只是为了更新我是如何做到的。我创建了一个后台工作人员(如下所示),每当检测到相机将照片从相机复制到 PC 时就会启动它。然后当文件到达 PC 以使用异步 HTTP 传输上传时,我启动了另一个后台工作人员。把一切都做好确实很痛苦,尤其是因为手术应该随时“可取消”……但无论如何,现在它可以工作了。非常感谢所有帮助过我的人!
最佳答案
我会避免在任何具有 UI 的线程中使用 HTTP,除非您确实想阻塞直到收到响应。您可以尝试使用后台线程中的相同逻辑,该线程将根据需要运行。只要确保有逻辑来检测连接何时丢失(可能是由于超时),并会定期(但不频繁)重试,直到再次连接。
最好的办法是创建某种后台工作进程,一旦照片保存到设备上的保管箱目录,它就会上传照片。我会说,虽然创建一个基于 .NET 的后台进程不是微不足道的。
关于.net - .NET 中用于通过不可靠 (3G) 网络连接发送数据的最佳设计是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/280755/