C# Azure云服务嵌入式FTP服务器

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,另一个用于传输数据 因此,看起来您需

我想在Azure云服务工作者角色中托管一个嵌入式FTP服务器

为了提供对FTP服务器的被动访问,它使用端口范围20000-21000。 在
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是否可以与工作者角色一起工作。问题是一次只能绑定一个端口。因此,如果我有多个并行被动数据连接,它将无法工作。