C# Azure云服务嵌入式FTP服务器
我想在Azure云服务工作者角色中托管一个嵌入式FTP服务器 为了提供对FTP服务器的被动访问,它使用端口范围20000-21000。 在C# Azure云服务嵌入式FTP服务器,c#,azure,endpoint,azure-cloud-services,ftp-server,C#,Azure,Endpoint,Azure Cloud Services,Ftp Server,我想在Azure云服务工作者角色中托管一个嵌入式FTP服务器 为了提供对FTP服务器的被动访问,它使用端口范围20000-21000。 在ServiceDefinition.csdef中,我定义了所有需要的端口(参见屏幕截图) 主要问题是港口数量庞大。如果我尝试将服务上传到云中,会出现以下错误 验证错误:输入终结点的数目无效-当前为1002, 最多25 如何使用云服务完成此工作?当客户端使用被动模式连接到FTP服务器时,它将进行两次连接。 一个使用端口21,另一个用于传输数据 因此,看起来您需
ServiceDefinition.csdef中,我定义了所有需要的端口(参见屏幕截图)
主要问题是港口数量庞大。如果我尝试将服务上传到云中,会出现以下错误
验证错误:输入终结点的数目无效-当前为1002,
最多25
如何使用云服务完成此工作?当客户端使用被动模式连接到FTP服务器时,它将进行两次连接。
一个使用端口21,另一个用于传输数据
因此,看起来您需要在ServiceDefinition.csdef中打开一个端口,然后在防火墙(负载平衡器)上创建一个端口转发规则,以将所有被动端口重定向到该单个端口
<Endpoints>
<InputEndpoint name="FTP2Azure.Command" protocol="tcp" port="21" localPort="9003" />
<InstanceInputEndpoint name="FTP2Azure.Passive" protocol="tcp" localPort="9002">
<AllocatePublicPortFrom>
<FixedPortRange max="21000" min="20000" />
</AllocatePublicPortFrom>
</InstanceInputEndpoint>
</Endpoints>
这未经测试,但可能会有所帮助。这里是一个基于Azure支持答案的解决方案
您需要在.cscfg文件中定义公共IP,并将其上载到云服务
<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="ILPIPSample" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="4" osVersion="*" schemaVersion="2014-01.2.3">
<Role name="WebRole1">
<Instances count="1" />
<ConfigurationSettings>
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" />
</ConfigurationSettings>
</Role>
<NetworkConfiguration>
<AddressAssignments>
<InstanceAddress roleName="WebRole1">
<PublicIPs>
<PublicIP name="MyPublicIP" domainNameLabel="WebPublicIP" />
</PublicIPs>
</InstanceAddress>
</AddressAssignments>
</NetworkConfiguration>
</ServiceConfiguration>
之后,您可以使用nslookup获取分配给实例的公共IP。如果有多个实例,则需要将0更改为1、2、3等
nslookup WebPublicIP.0..cloudapp.net
然后,您可以在实例的Windows防火墙中打开本地端口,并可以直接从internet连接本地端口
您可以创建一个启动任务来打开云服务防火墙中的本地端口。
以下是如何配置防火墙规则的示例。每次重新启动/重新映像实例时,都会执行启动任务
如下所示:
netsh advfirewall firewall add rule name=“TCP ports”protocol=TCP dir=in localport=1000-2000 action=allow
这篇自述说明PASV模式不起作用。也许是因为。您可以创建一个安装了共享存储的IIS FTP服务器的虚拟机可用集。是的,我们的产品正在进行。但我们明确地希望切换到具有自定义嵌入式FTP服务的工作者角色。我知道FTP2Azure,但他们甚至没有实现被动连接。所以我很抱歉,但这对我的问题没有帮助。这是一个云服务工作者角色,没有什么比防火墙更好的。我已经用一个示例更新了我的答案,并澄清了我所说的防火墙。所以我的FTP服务器需要监听端口9002以进行被动连接?是的,当客户端尝试连接时,负载平衡器将所有20000-21000端口转发至端口9002。理论上是这样的。我无法进行测试,但可以确认InstanceInputEndpoint是否可以与工作者角色一起工作。问题是一次只能绑定一个端口。因此,如果我有多个并行被动数据连接,它将无法工作。