我需要在端口 21 上部署一个带有输入端点的 Azure 辅助角色,以便它可以接受传入的 FTP 连接。这样我就应该能够通过 Filezilla 等 FTP 客户端连接到辅助角色并访问 azure blob 存储。
为此,我能够实现 FTP 命令,如 LIST、RETR、STOR、PORT、USER 和 PASS。所有这些都可以在 FTP 的主动模式下正常工作。
但是当我切换到 FTP 的被动模式(对 Azure Worker Role 执行 PASV 命令)时,我发现了问题。由于我是 Azure 的新手,所以无法跟踪问题。.浏览了一些博客才知道由于Azure Worker角色超出了负载均衡器的范围,因此被动模式需要配置。我看到很少有博客谈论手动配置FTP的Web角色。由于我正在处理Worker角色,配置是否更改以及如何在代码中处理它更重要的是,因为我们不确定角色将部署哪台虚拟机......我如何处理配置
我尝试过的方法:
1.在Azure Worker角色中,我设置了以下端点
FTP 输入 tcp 21
端点1输入tcp 1025
最初在 Start() 上,我在线上有此代码
TcpListener 服务器 = SocketHelpers.CreateTcpListener(RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["FTP"].IPEndpoint);
在 PASV 模式下我有以下内容
TcpListener 服务器 = SocketHelpers.CreateTcpListener(RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint1"].IPEndpoint); 这样它就在新端口 1025 上打开并发送回客户端。在发送回客户端时,我遇到了如下异常:
SocketErrorCode 为 10053,SocketErrorDesc:System.Net.Sockets.SocketError.ConnectionAborthhed
无法将数据写入传输连接:已建立的连接被主机中的软件中止。
2.其他方式通过使用http://checkip.dyndns.org/,if获取外部IP地址我从中获取IPadress,我是否需要使用代码从代码中获取端口 RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint1"].IPEndpoint???
我真的对 Azure 的东西和 FTP 配置感到很困惑。
我浏览了以下文章,但找不到如何以编程方式配置辅助角色(设置端口范围,从代码中检索)以在被动模式下工作。
http://www.itq.nl/blogs/post/Walkthrough-Hosting-FTP-on-IIS-75-in-Windows-Azure-VM.aspx http://angelolaris.blogspot.com/
问候, 维韦克
最佳答案
首先我想确认的是,不确定您是否也按如下方式或现在启动监听器:
TcpListener myPortListener = new TcpListener(RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["MY_PORT"].IPEndpoint);
myPortListener.Start();
接下来,当您的辅助角色中有上述代码时,端口开始接受传入请求,并且任何绑定(bind)到 IP/端口的应用程序都将接收数据包。
如果您真的想了解如何让它在您的辅助角色中工作,您可以做的是,following this guidance to setup in a Web Role首先,然后尝试在您的辅助角色中复制相同的配置。做起来并不复杂,但首先您需要了解事情是如何工作的,然后您才能实现它本身。
您的要求也不清楚,因为我不确定您为什么需要这样的配置,因为您可以从辅助角色直接连接到 Azure Blob 存储(如果您的数据位于 Azure Blob 存储)并访问内容,为什么FTP/本地连接使其变得复杂。如果您重新审视您的应用程序架构,可能就不需要做这样的工作。
关于sockets - 通过套接字编程在 Azure 辅助角色上进行被动 FTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12191183/