.net - .NET 中用于通过不可靠 (3G) 网络连接发送数据的最佳设计是什么?

标签 .net mobile networking

我正在重新设计我继承的一个应用程序,它将数码照片从笔记本电脑发送到网络服务器。这个想法是在“现场”拍摄照片并立即将它们发布在网页上(具有一些更花哨的功能)。

典型场景
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/

相关文章:

.net - SandCaSTLe 没有记录返回类型

c# - 一个类名很常见怎么办?

javascript - 如何在 ASP.net 中从 Javascript 调用 C# 服务器端函数

css - Safari 上的 Flex box 问题——移动和桌面

ios - 应用程序首次启动时将网络请求放在哪里

.net - console.writeline 线程安全吗?

html - Bootstrap 4 移动导航栏不会崩溃

Android 操作系统中的 Jquery 移动框架

java - In & Out 无法解析为类型 (Java Socket)

networking - 以编程方式从计算机阻止路由器上的网站