SkyDrive と WebDAV クライアントと「.NET Passport 認証」
2010年02月11日(木)00時44分
不安定
前回の記事を書いた後、WebDAV についていろいろ検索してわかったことは、これ、Microsoft 社が提案してはじめたものらしいんですが、その割には、当の Windows での扱いというか実装はかなり残念なものであるらしく、不安定であったり、それ以前に繋がらなかったりと、とにかく(Windows 標準機能では)ロクに使えないものとして有名であるみたいです。
そしてその傾向は「98 → 2000 → XP → Vista → 7」と一貫して(それどころか場合によっては悪化すらして)見られる傾向であるらしく、つまり現時点では Microsoft 的にはあまり注力する予定のないもののようで。
Web フォルダ
実際あの後、追加した Web フォルダでいろいろ試してみましたが、小さいファイルを少量コピーする程度なら何とかなるんですが、ファイルが大きかったり量が多かったりすると、エラーがでたり、ハングアップしてたり、エクスプローラが落ちたりと、どうにもうまくいかなくなります。
WebDAV クライアント
しかし、使う予定はなくとも、使えないとなると何とかしてみたいと思うもので、Microsoft 製(Windows 標準機能)に期待できないなら、それ以外の専用に作られたアプリケーション(WebDAV クライアントというそうです)はどうか?ということで、いくつかフリーで公開されているものを試してみました(だったら SkyDrive Explorer 使えば…、というのはひとまずおいて)。
CarotDAV
【追記:2010/02/15】作者様が対応してくださり、現在(2010/02/15)の CarotDAV は「.NET Passport 認証」はおろか、SkyDrive にも直接対応しております。
まずは CarotDAV を。
これは「WebDAV クライアント」で検索するとトップに出てくる、いたるところでお勧めされている、このジャンルにおけるメジャーソフトのようです。
作者は日本人の方ですが UI は英語で、要「.Net Framework」、インストーラでインストールして使います。
で、設定してテストボタンを押してみるも「Unassumed PROPFIND response Status: 200」のダイアログが出て接続できず。
以下のようなエラーで接続不可でした。
System.Net.WebException: Unassumed PROPFIND response
Status: 200
場所 Rei.Fs.Webdav.WebdavFs.InnerGetInfo(Uri& target, DepthType depth)
場所 Rei.Fs.Webdav.WebdavFs.GetEntries(Uri& target)
場所 CarotDAV.MainForm.Client_GetEntries_Connect(Uri& target)
dddav
次に試してみたのがこちら dddav で、上記 CarotDAV の作者様のサイトでも「いまでも CarotDAV が動かない時はまずこれを試します。」と紹介されています。
こちらも作者は日本人の方で UI は日本語(英語版もあり)、C++ で作られていて、「インストール不要・レジストリ未使用」と非常に自分好みのソフトウェアですが、「接続に失敗しました」とダイアログが出て接続できず。
NetDrive
これは海外製(上記リンク先は日本語化パッチを作られている方のサイト)で、このソフトは前述の二つとは少し毛色が違い、アップ(ダウン)ローダ的なものではなく、ネットワークドライブとしてマウントします。
Vista では使えないそうです。
早速インストール & 日本語化して接続してみるも、「https://〜、302 Found の WebDAVサーバーに接続できません」で接続できませんでした。
「.NET Passport」認証
そういうわけで、試したどのソフトも接続できなかったわけですが、これはおそらく Windows Live SkyDrive を WebDAV 経由で使用する際の認証方式が(多分ですが)「.NET Passport 認証」で、一般的な WebDAV クライアントがこの認証方式に対応してないためではないかと思います。
例えば CarotDAV の作者様のサイトでは「調べた範囲では、最もたくさんの認証方式に対応しています。」と書かれており、対応している方式として「Basic、Digest、NTLM、Kerberos、SPNEGO、WSSE」が挙げられていますが、「.NET Passport 認証」はありません。
しかし、考えてみれば、WebDAV という(Microsoft 提案とはいえ)オープンな規格を使おう、あるいは提供しようという場合に、「.NET」なんて付いている、いかにも「マイクロソフトオリジナル」的な、特定一社に依存しそうな認証方式を「採用しよう」とはなかなかならないだろうと思いますので、汎用的な WebDAV クライアントが「.NET Passport 認証」を無視してもほとんど問題になることはないんじゃないかという気はします。
ひょっとしたら SkyDrive 以外にこの認証方式を使っているところは存在しないのではなかろうかとすら思います。
とはいえ
といっても、もし SkyDrive を安定して使える WebDAV クライアントがあったとしても、それでは SkyDrive をなんに使うか、というと今のところ自分にとっては使い道が思いつかなかったりします。
「火事や地震でも安全」ということでバックアップ先にできれば、と思いますが、いかに非公開とはいえ一応「外部にある」わけで、例え軽くでも暗号化ぐらいはしておきたいとは思いますし、それで例えば TrueCrypt のような暗号化ディスクを使うとすると、1ファイルあたり50MBという制限がネックになりますし…。
まあ仮に50MB制限がなかったとしても「差分アップロード」のような仕組みがなければ、毎回数GBのイメージファイルをやり取りするわけで、それも現実的ではありませんが。
【同じタグを付けた記事の一覧】
→
バックアップ
WindowsLiveSkyDrive
コメントの投稿
No title
> いかにも「マイクロソフトオリジナル」的な、特定一社に依存しそうな認証方式
NTLMもKerberosもSPNEGOのうち殆ども、いかにもMS的な認証方式です。
MSはHTTPに一体いくつ認証方式を作れば気が済むのでしょうか…。
> ひょっとしたら SkyDrive 以外にこの認証方式を使っているところは存在しないのではなかろうかとすら思います。
私の知る限り、WebDAVが使えるサービスはありませんでした。
が、あってもおかしくないと思います。
私が知らないだけだと思います。
なので、Passport認証およびSkyDriveに対応してみました。
一応私のところでは使えていますが、
いくつかサーバーに不具合があるようです。
JPGやBMPが削除できなかったり、ファイル名が化けたりしています。
また、DAV経由だと速度が遅くなるようです。
> SkyDrive をなんに使うか
DAV経由で使えるということは…
私にとっては、他のプログラムに簡単に組み込むことができる、ということになります。
公開フォルダがありますので…
動画サイトや掲示板の過去ログの共有システムを作る、というのも面白いかと。
P2Pで、バックストレージにSkyDriveを使うとか。
ま、とりあえず。
普通にファイルのアップ/ダウンはできるので、
よければ使ってみてください。
ありがとうございます
まさか作者様から直接メッセージをいただけるとは思ってもおらず、非常に恐縮でございます。
このたびは、お礼の返信が遅れて申し訳ございません。
実はメッセージを拝見してすぐにダウンロードして使ってみたのですが、
再現性のないエラーの連発に悩まされておりまして、試行錯誤していたのですが、
振り返るとどうも、JPEGファイルでテストしていたせいな気がします。
思い立って同じ程度の容量のMP3ファイルで試してみますと、
同様のエラーはほとんど見ずに成功してしまいましたので。
通常?のWEBサイトからのアップロードの際には、画像の場合だけサイズを変更できたりしますので、
やはりSkyDriveでは画像ファイルは何か特別な扱いにでもなっているのでしょうか。
そしてやはり速度は凄く遅かったです。
最初の一発目こそ91KiB/sなんて数字を見ましたが、その後みるみる下がっていき、
すぐに4〜7KiB/sしかでなくなりました。
ダウンロードは200KiBとかでていて、試した限りではあまり下がる気配もなかったんですが。
といってもダウンロードの方はあまり何回も試してはいないのですが。
> P2Pで、バックストレージにSkyDriveを使うとか。
これなんですけれど、実は自分は元々Windows Live SyncというMicrosoft製のP2Pファイル同期システムを、
バックアップ目的で使用するためにWindows Live IDを取ったんですが、
Microsoftがこれの同期先としてSkyDriveを選択できるようにしてくれるといいなあ、とずっと思ってました。
しかし自前で実装しようにも、このアップロード速度では厳しいような気もしますね。
もっともそれ以前に自分には実装する技術もないんですけれど。
それから、頻発したエラーメッセージというのは以下のようなもので、
数十KB程度のJPEGファイルだと出ないのですが、2〜3MBぐらいのものになると出るようになります。
同じファイルでも出るときと出ないときがあって、出たときも何度かリトライしていると成功したりします。
----------------------------------------------------------------------------
System.Net.WebException: 基礎になる接続が閉じられました: 受信時に予期しないエラーが発生しました ---> System.IO.IOException: 転送接続にデータを書き込めません: 既存の接続はリモート ホストに強制的に切断されました。。 ---> System.Net.Sockets.SocketException: 既存の接続はリモート ホストに強制的に切断されました。
場所 System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
場所 System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size)
--- 内部例外スタック トレースの終わり ---
場所 System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size)
場所 System.Net.Security._SslStream.StartWriting(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)
場所 System.Net.Security._SslStream.ProcessWrite(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)
場所 System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size)
場所 System.Net.PooledStream.Write(Byte[] buffer, Int32 offset, Int32 size)
場所 System.Net.ConnectStream.InternalWrite(Boolean async, Byte[] buffer, Int32 offset, Int32 size, AsyncCallback callback, Object state)
場所 System.Net.ConnectStream.Write(Byte[] buffer, Int32 offset, Int32 size)
場所 Rei.Fs.CloseNotifyWriteStream.Write(Byte[] buffer, Int32 offset, Int32 count)
場所 CarotDAV.AsyncCopy.DavCopyWorker_Upload_UploadFile(DavCopyTask task)
--- 内部例外スタック トレースの終わり ---
場所 System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
場所 Rei.Fs.Webdav.WebdavFs.GetResponse(HttpWebRequest request, Boolean notreqstream)
場所 Rei.Fs.Webdav.WebdavFs.RequestStreamClose(CloseNotifyWriteStream stream)
場所 Rei.Fs.CloseNotifyWriteStream.Close()
場所 System.IO.Stream.Dispose()
場所 CarotDAV.AsyncCopy.DavCopyWorker_Upload_UploadFile(DavCopyTask task)
----------------------------------------------------------------------------
そのときのログをみていると(関係ないかもしれませんが)、
----------------------------------------------------------------------------
AuthorizationMethod =
<HTTP/1.1 207 Multi-Status
< Pragma: no-cache
〜省略〜
< Content-Length: 528
< [MESSAGEBODY LENGTH:1178]
----------------------------------------------------------------------------
の部分の最後の二行の数値が、成功したときは「< Content-Length: 364 < [MESSAGEBODY LENGTH:364]」
のように一致しており、失敗するときは上のように(528!=1178)違っていました。
これとは別にタイムアウトのエラーも稀に出るのでデフォルト(10)から60に増やしています。
何か参考になりますでしょうか?
もうしばらくこのCarotDAVでSkyDriveをいろいろ試してみようと思います。
最後に重ねて、ありがとうございました。
申し訳ありません
何度もリトライを繰り返すうちに、突然転送速度が90KiB/s程度に跳ね上がり、
上記のエラーがほとんどでなくなりました。
代わりに各ファイル転送完了時に必ずタイムアウトエラーが出るようになったのですが、
これも何度もIgnoreを繰り返しながら続行していると、そのうちでないように…。
原因も解決法もはっきりしないまま、今は平均速度90KiB/s程度の、
比較的安定した(それでもごく稀にエラーは出ますが)転送ができています。
どうやらSkyDrive側の回線状況による、極めて特殊な環境下でのエラーだったようで、
上記返信のエラー報告の部分に関しては、無視していただきたく存じます。
お騒がせして申し訳ございません。
No title
googleのリアルタイム検索を試していたらみつけたもので。
そんな恐縮なさらないでください。
> やはりSkyDriveでは画像ファイルは何か特別な扱いにでもなっているのでしょうか。
> それから、頻発したエラーメッセージというのは以下のようなもので、
報告ありがとうございます。
今日私のところはダメダメで、1Mのexeがどうしても上げられません。
拡張子をtxtにすると問題なし。
画像だけでなく、exeなども特別な扱いになっているようです。
件の「ファイル転送完了時に必ずタイムアウトエラー」もそれのひとつが原因だろうと思われます。
アップロードしてからなにか作業をしているようで、
(ウィルス検査やサムネール生成でしょうか?
その間にファイルのプロパティを更新しようとするととても時間がかかります。
CarotDAVはファイルをアップロードしてすぐに更新日時を変更しようとしますので、そこでタイムアウトになります。
> もうしばらくこのCarotDAVでSkyDriveをいろいろ試してみようと思います。
> 比較的安定した(それでもごく稀にエラーは出ますが)転送ができています。
いやー。
私が言うのもなんですが、これはダメだと思います。
CarotDAVのSkyDriveは使いものになりません。
拡張子で振る舞いが違ったり、画像ファイルが消せなかったり、ではストレージとして役にたちません。
普通にブラウザから使うほうがよっぽどいい。
言い訳をするなら、サーバーがひどすぎます…。
私の技量では対応するのはかなり厳しい。
多少遅くても、安定していれば使いようがあるのですが。
またここでも非スタンダード+不安定なWebDAV運用です。
WebDAVはいつもこうやって相性とか互換性の問題が大きくなって、結局「つかえねー」となるんですが…。
何がいけないのかなぁ。
手段が目的でしたので
そういえば実行可能ファイルに関してはダウンロードの際に
「PCにダメージを与える可能性が…」のようなメッセージを出すみたいですので、その関係なんでしょうか。
自分にとってSkyDriveは、「せっかくあるんだから何かに使わないともったいない…」で触り始めたもので、
元々目的がなかっただけに、別に使わなくとも困ることは何もないんですが、
理屈の上では使えそうなのに、微妙に穴があって難しい、というのはもどかしいですね。
しかし「CarotDAV & SkyDrive」の組み合わせでも、
挙動の傾向をつかみ、原理を考慮して適宜対処していけば使えなくはないとはいえ、
せっかく対応していただいたというのに、(多分)サーバ側の問題で万人にお勧めできる状態にはない、
というのは残念です。
SkyDrive ExplorerやGladinet Cloud Desktopは、
動作原理的には「出来のいいWebClientサービス」的なもののようで、
ローカルにキャッシュ分の容量が必要みたいですし、
Webサイト経由ですとフォルダ構造を保ったままのアップロードが困難だったりしますから、
CarotDAVのようなソフトが占める余地は十分にあると思うのですが…。










![Kis-My-Mint Tour at 東京ドーム 2012.4.8(仮)(初回生産限定盤) [DVD]](http://ecx.images-amazon.com/images/I/51p-sxdGjXL._SL160_.jpg)

![ARASHI LIVE TOUR Beautiful World【5月9日以降のご注文は発売日以降の発送になります。】 [DVD]](http://ecx.images-amazon.com/images/I/41UMLUlzj8L._SL160_.jpg)

![機動戦士ガンダムUC (Mobile Suit Gundam UC) 5 [Blu-ray]](http://ecx.images-amazon.com/images/I/61muhMOrI%2BL._SL160_.jpg)













![Transcend SDHCカード 16GB Class10 永久保証 [フラストレーションフリーパッケージ (FFP)] TS16GSDHC10E](http://ecx.images-amazon.com/images/I/41HhhTcP0bL._SL160_.jpg)
