在客户端pc和远程frp服务器之间创建直接连接

时间:2011-04-21 09:58:41

标签: asp.net http ftp file-transfer

大家度过美好的一天......

我正在开发一个Asp.Net Web应用程序,我必须在其中实现文件上传,但有一点复杂:

为了更好地解释,应用程序在服务器“A”上运行..文件需要上传到完全不同的服务器“B”..

客户端“C”通过站点界面上传文件后,该文件必须实际上传到服务器B.

从技术上讲,我已经实现了这个目标:

  • 客户端从他的电脑上选择要上传的文件,然后点击“上传”
  • 在页面的postBack“,服务器上传文件而不保存
  • 我从FileUploas控件中获取fileStream并通过ftp将其发送到服务器“B”;

但是,通过这样做,实际上文件被传输了两次(C - > A - > B),使得文件上传的用户体验比平常更长。

我的问题是:是否可以通过站点界面(在服务器“A”上运行)打开“C”和“B”之间的“直接”连接,以便执行单次传输?显然,我应该能够在下载过程中做同样的事情。

替代方案(至少在上传期间)应该是通过在服务器“A”上保存临时文件来“隐藏”双重传输,然后将其重新传输到“B”以启动分离的任务,以便用户将能够在“首次”上传后在网站上执行新操作。

非常感谢任何建议(即使是完全不同的解决方案,我会评估与我的项目的“兼容性”)

提前谢谢你,

阿尔贝托

注意:我选择使用FTP,因为客户端必须能够选择他希望放置“B”服务器的位置(他可以使用“我们的”ftp,或者如果有的话,可以在那里发送文件)和我认为FTP是最“兼容”和“快速设置”的解决方案,ftp管理类似于服务器“B”平台。

1 个答案:

答案 0 :(得分:0)

目前尚不清楚,您对C的期望是什么样的联系。如果C可以打开与B的直接连接,并且如果服务器A具有访问B的凭据,则该方案可以如下所示:

  1. 客户端C与服务器A建立命令通道
  2. 服务器A与服务器B建立命令通道
  3. 客户端开始准备数据传输。此时,C从服务器A请求被动模式.A立即开始准备与服务器B进行数据传输,并从服务器B请求被动模式。此AB准备应完全在服务器A之间进行,从C接收PASV命令和发送响应时这个命令。所以它应该快速(我认为最多2-3秒)。
  4. 服务器A获取从服务器B连接的地址和端口,并将此数据作为对从C接收的PASV命令的响应发送。
  5. C将数据传输到B.服务器A通过命令通道从B接收“传输完成”并将其发送到客户端。
  6. 现在,服务器A可以关闭到服务器B的命令通道(如果需要)。
  7. 以上要求您了解FTP协议的详细信息,并且很可能自己将其实现为客户端和服务器。这可能非常耗时。