none
WebClientクラスによる ファイルのFTPアップロードについて RRS feed

  • 質問

  • みなさま、こんにちわ!
    いつもお世話になります。

    早速ですが、質問をさせてください。


    WebClientクラスでの UploadFileメソッドを使って、FTPによりファイルをアップロード
    しています。

      WebClient wc = new WebClient();
      wc.Credentials = new NetworkCredential("user01", "mypassword");
      wc.UploadFile("ftp://servername/upload/secret.png", "tmp.png");


    ここで、

     1.正しいユーザー名・パスワードをセットしアップロードする。 → 転送OK
     2.不正なユーザー名をセットしアップロードする        → 転送エラー
     
     となり、正しい動きと認識しています。
     
     
    一方、
     
     1.正しいユーザー名・パスワードをセットしアップロードする。 → 転送OK
     2.不正なパスワードをセットしアップロードする        → 転送OK
     
       となってしまい、パスワードが間違っていても転送が行われているようです。
       (ファイルは更新され、例外も発生しません)
     
     
    しかし、アプリケーションを立ち上げ直し、一度も転送を行う前に 不正なパスワードを
    セットしアップロードすると例外が発生します。(正しい動きと思っています)

    即ち、アプリケーションの中で、一度正しいユーザー名・パスワードでアップロード
    すると、それ以降 不正なパスワードでもアップロード可となってしまうようです。

    但し同様の手順で 不正なユーザー名をセットした場合には例外が発生します。


    wc.UploadFile の後、ファイル・クローズのような処理が必要なのかな・・、と思い
    色々調べてみましたが、答えが見つかりません。

    どのような仕組みなのか理解ができていないため、認識に誤りがあるのではと考えています。

    何処に間違いがあるのかアドバイスを頂きたく、宜しくお願いします。

    2011年4月4日 8:42

回答

すべての返信

  • using Statementを利用してDispose Methodを呼び出しても、同じ現象が発生するのでしょうか?

    [using Statement]
      http://msdn.microsoft.com/en-us/library/yh598w02.aspx

    2011年4月4日 12:31
  • kozz さん、アドバイス有り難うございました。

    テストできる環境が手元になかったため、ご報告が遅くなってしまい、申し訳ありません。

    で、色々試してみたのですが、結論として旨く行きませんでした。
    (もっとも、間違った事をやっている可能性は否定できませんが・・・)

    その後、改めて色んな記述を調べてみた所、以下の記述が見つかりました。

    ----------------------------------------------------------------------------------------------------------------
    WebClientクラスでは、細かい設定は指定できず、FtpWebRequestのデフォルトの設定がそのまま
    使われているため、FtpWebRequest.KeepAliveプロパティがTrueのため、WebClient.Disposeメソッドを
    呼び出してもログアウトしません。
    ----------------------------------------------------------------------------------------------------------------


    という事で、改めてWebRequest/WebResponseクラスを使ってトライしてみる事にします。

    どうも有り難うございました。


    4/13 追記

    この件は、FTPサーバへの接続/切断、サーバ上のファイルへのアクセスなど、それぞれの仕組みや
    扱い方についての必要な知識が不十分で、問題点・質問の詳細を絞りきれません。

    この辺りを再度勉強し直してから、改めて質問させて頂く事にし、このスレッドは一旦クローズ
    させて頂きます。

    どうも、有りがとうございました。

    2011年4月6日 3:13