8

私のシナリオでは、ユーザーはzipファイルをにアップロードできますa.example.com

a.example.com指定された時間間隔でユーザーがアップロードしたzipファイルをからに移動する「デーモン」を作成したいと思います。b.example.com

これまでに集めた情報から、

  1. デーモンは.ashx汎用ハンドラーになります。
  2. デーモンは、 pleskcronジョブを介して指定された時間間隔でトリガーされます
  3. デーモン( SLaksのおかげで)は、2つのFtpWebRequest(1つは読み取り用、もう1つは書き込み用)で構成されます。

では、問題は、ステップ3をどのように実装できるかということです。

  • ファイル全体をmemory()配列に読み込んで、それを書き込もうとする必要がありb.example.comますか?
  • 読んだ情報をどのように書くことができb.example.comますか?
  • ファイルの読み取りと書き込みを同時に実行できますか?

いいえ、完全なコードを要求しているわけではありません。ユーザーの操作なしで、その場で読み取りと書き込みを実行する方法を理解できます。

つまり、ファイルをからローカルにダウンロードしa.example.comてアップロードすることはできますb.example.comが、それは重要ではありません。

4

8 に答える 8

8

別の解決策は次のとおりです。

  1. サーバーAのASP.Netがファイルを通常のファイルアップロードとして受信し、ディレクトリXXXに保存するようにします。
  2. サーバーAにWindowsサービスがあり、ディレクトリXXXで新しいファイルをチェックします。
  3. ウィンドウサービスに、を使用してファイルをサーバーBにアップロードさせます。HttpWebRequest
  4. サーバーBに、通常のASP.Netファイルアップロードページを使用してファイルを受信させます。

リンク:

あなたが解決しなければならない問題:

  1. サーバーBにアップロードするファイルを決定する方法。を使用する代わりに、を使用して新しいファイルを検索しDirectory.GetFilesます。ファイルが以前にアップロードされているかどうかを確認できる必要があります(ファイルを削除する、名前を変更する、DBを確認するなど、必要に応じて)。TimerFileSystemWatcher

  2. サーバーBでの認証。これにより、サーバーBにファイルをアップロードできるのは自分だけになります。

于 2011-02-20T21:10:17.450 に答える
5

あなたの質問に答えるために-はい、あなたは同時にファイルを読み書きすることができます。

FTPWebRequestServerAとServerBを開くことができFTPWebRequestます。FTPWebRequestto serverAで、ファイルを要求し、を取得しますResponseStream。を取得したら、一度ResponseStreamにバイトのチャンクを読み取り、そのバイトのチャンクをserverBに書き込みますRequestStream

使用するメモリはbyte[]、読み取り/書き込みループのバッファのみです。ただし、の基になる実装はFTPWebRequest、応答ストリームを返す前に完全なFTPファイルをダウンロードすることに注意してください。

FTPWebRequest同様に、すべてのバイトが書き込まれるまで、新しいファイルをアップロードするためにを送信することはできません。実際には、操作は同期して行われます。GetResponse完全なファイルが利用可能になるまで戻らない呼び出しを呼び出します。そうして初めて、新しいファイルを「アップロード」できます。

参照:

FTPWebRequest

于 2011-02-23T18:27:56.333 に答える
3

考慮しなければならないことは、AppDomainが更新されると、長時間実行されるWeb要求(.ashx汎用ハンドラー)が強制終了される可能性があることです。したがって、コードにある種のアトミックトランザクションロジックを実装する必要があります。そのようにすると、突然の切断や不完全なFTP転送を処理する必要があります。

以前にWindowsAzureを見たことがありますか?このクラウドプラットフォームは分散ファイルシステムをサポートし、アトミックトランザクションが組み込まれています。さらに、サービスが急速に成長した場合でも、適切に拡張できます。

于 2011-02-24T09:35:45.330 に答える
2

私はそれをかなり単純にします。クライアントプログラムはファイルをサーバーAにアップロードします。これは、C#でFtpWebRequestを使用して非常に簡単に実行できます。

http://msdn.microsoft.com/en-us/library/ms229715.aspx

次に、ファイルがアップロードされるディレクトリを監視するサービスをサーバーAに配置します。ファイルがそのディレクトリにアップロードされるか、特定の間隔でアップロードされると、ファイルはサーバーBにコピーされます。同じネットワーク上にある場合は、Ftpまたはその他の方法でこれを実行できます。

于 2011-02-24T20:01:57.617 に答える
1

ターゲットドメインにリスナーが必要で、そこで実行されているftpサーバーが必要です。クライアント側では、System.Net.WebClientとUploadFileまたはUploadFileAsyncを使用してファイルを送信します。それはあなたが求めていることですか?

于 2011-02-16T18:31:35.850 に答える
1

Webサービスやハンドラーは本当に必要ないようです。必要なのは、定期的に他のサーバーへのFTP接続を開き、ファイルを移動するプログラムです。これは、System.WebClientライブラリを使用する任意の.NETプログラムで実行でき、「Webアプリ」である必要はありません。この他のプログラムは、独自のタイミングを処理できるサービス、またはcronジョブによって実行される単純なアプリである可能性があります。これを2つの方法で実行する必要がある場合、たとえば2つのサーバーがミラーである場合、2番目のボックスに同じアプリを配置して、最初のボックスにファイルをアップロードするために同じことを実行します。

于 2011-02-16T19:25:18.803 に答える
1

両方のマシンが同じドメインにある場合、OSレベルでファイル複製を行うことはできませんか? DFS

于 2011-02-23T18:33:33.213 に答える
1

Linuxベースのシステムを使用している場合は、キーを設定します。

http://compdottech.blogspot.com/2007/10/unix-login-without-password-setting.html

キーが機能するようになったら、ユーザーの操作を必要としない通常のシェルスクリプトを記述して、システムAからシステムBにファイルをコピーできます。

于 2011-02-27T20:27:47.663 に答える