0

ポート 21 で着信要求をリッスンする Azure ワーカー ロールに TCP リスナーが実装されているためです。

Windows コマンド プロンプト (cmd.exe) から FTP に接続すると、接続が成功します。

ただし、600MB などの大きなファイルに対して PUT コマンドを発行すると、

       ftp>> put localfile remotefile

ちょうど1分間のデータ転送の直後に、「ホストによって接続が閉じられました」というエラーで接続が切断されます。大量のデータ転送中は、FTPの制御接続がアイドル状態になるためです。

Azureロードバランサーが1分間アイドル状態の接続を終了するためだと思います。

接続を終了する Azure ロード バランサーであるか、ftp クライアントのタイムアウトを増やすことができる Windows のレジストリ設定であるか、またはアイドル状態の接続を強制終了するファイアウォール設定であるかに関係なく、入力します。

キープアライブ メッセージを tcpclient から tcplistener に送信するために次のコードを試しましたが、成功しませんでした。

           int size = sizeof(UInt32);
                UInt32 on = 1;
                UInt32 keepAliveInterval = 10000; //Send a packet once every 10 seconds.
                UInt32 retryInterval = 1000; //If no response, resend every second.
                byte[] inArray = new byte[size * 3];
                Array.Copy(BitConverter.GetBytes(on), 0, inArray, 0, size);
                Array.Copy(BitConverter.GetBytes(keepAliveInterval), 0, inArray, size, size);
                Array.Copy(BitConverter.GetBytes(retryInterval), 0, inArray, size * 2, size);

Connection.OutboundTcpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, True) Connection.OutboundTcpClient.Client.IOControl(IOControlCode.KeepAliveValues, inArray,null);

4

0 に答える 0