2

我需要在端口 21 上部署一个带有输入端点的 Azure Worker 角色,以便它可以接受传入的 FTP 连接。这样我就应该能够通过 Filezilla 等 FTP 客户端连接到 Worker 角色并访问 azure blob 存储。

为此,我能够实现 FTP 命令,如 LIST、RETR、STOR、PORT、USER 和 PASS。所有这些都适用于 FTP 的活动模式。

但是当我切换到 FTP 的 PASSIVE 模式(对 Azure Worker Role 执行 PASV 命令)时,我发现了问题。因为我是 Azure 的新手,所以无法追踪问题。通过几个博客知道,因为 Azure Worker 角色超出了负载均衡器,因此 PASSIVE 模式需要配置。我看到很少有博客讨论手动配置 FTP 的 Web 角色。因为我正在处理 Worker 角色,配置是否更改以及如何在代码中处理它等等因为我们不确定该角色将部署哪台 vm 机器..我该如何处理配置

我试过的方法:

1.在Azure Worker角色中,我设置了以下端点

FTP 输入 tcp 21

Endpoint1 输入 tcp 1025

最初在 Start() 上,我有这个代码在线

TcpListener server = SocketHelpers.CreateTcpListener(RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["FTP"].IPEndpoint);

在 PASV 模式下,我有以下

TcpListener server = SocketHelpers.CreateTcpListener(RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint1"].IPEndpoint); 以便它在新的端口 1025 上打开并发送回客户端。在发送回客户端时,我得到了如下异常:

SocketErrorCode 是 10053 和 SocketErrorDesc:System.Net.Sockets.SocketError.ConnectionAborthed

无法将数据写入传输连接:已建立的连接被主机中的软件中止。

2.通过使用http://checkip.dyndns.org/获取外部IP地址的其他方式,如果我从中获取IPadress,我是否需要使用RoleEnvironment.CurrentRoleInstance.InstanceEndpoints [“Endpoint1”].IPEndpoint从代码中获取端口???

真的,我真的对 Azure 的东西和 FTP 配置感到困惑。

我浏览了以下文章,但找不到如何以编程方式配置工作角色(设置端口范围,从代码中检索)以在 PASSIVE 模式下工作。

http://www.itq.nl/blogs/post/Walkthrough-Hosting-FTP-on-IIS-75-in-Windows-Azure-VM.aspx http://angelolaris.blogspot.com/

问候, 维维克

4

1 回答 1

0

首先我想我可以确认的是,不确定你是否也开始如下或现在的监听器:

TcpListener myPortListener = new TcpListener(RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["MY_PORT"].IPEndpoint);
myPortListener.Start();

接下来,当您的工作角色具有上述代码时,端口开始接收传入请求,并且任何绑定到 IP/端口的应用程序都将接收数据包。

如果您真的想了解如何让它在您的 Worker 角色中工作,您可以做的是,按照本指南首先在 Web 角色中进行设置,然后尝试在您的 Worker 角色中复制相同的配置。做起来并不复杂,但首先你需要了解事情是如何工作的,然后你才能实现自己。

您的要求也不清楚,因为我不确定您为什么需要这样的配置,因为您可以从 Worker 角色直接连接到 Azure Blob 存储(如果您的数据位于 Azure Blob 存储中)并访问内容,为什么要有 FTP/本地连接使其变得复杂。如果你重新审视你的应用程序架构,你可能不需要做这样的工作。

于 2012-08-30T17:30:43.157 回答