著作一覧 |
.NET Framework 3.5のWebClientクラスのuploadメソッドを呼ぶのだがどうにもエラーになる。
調べると、WebDAVでファイルを送り込むのはきわめて簡単だとわかり、HttpWebRequestを使って実装した。PUTを使うこと、URIでファイル名まで指定すること、ヘッダ変数TranslateにFを指定すること(と、Exchange関係のMSDNページに出ているのだが、IISのWebDAVでは不要な気はする。もっとも付けても害は今ところないので入れている)くらい。成功すると初回はcreatedが返り、2度目以降はnocontentが返る。
だが、サーバ側のログを見ていると、401と20xで必ずペアで出ていることがわかった。(Credentialsプロパティを指定する必要があって、それはWindows認証なのだ)ということは、500Mのファイルとか送信するのはばかげた話だ。
2ファイル目以降は、PreAuthenticateプロパティをtrueにすることで2回送信する必要はないが、初回については何か認証が必要な軽いメソッドを呼ぶのが良いだろう。おそらくそれがMKCOLで、本来送りたいファイルが、/a/b/c.txtなら/a/b(追記:が自然だと思うがMKCOLのURIは/a/b/のように末尾ディレクトリセパレータが必要)を指定するのが良さそうだ。
追記:SendChunkedをtrueにすれば軽減できるかも。
ジェズイットを見習え |