Sending files in chunks with MTOM Web Services and .NET 2.0
http://www.codeproject.com/soap/MTOMWebServices.asp
MaxRequestLengthより大きなサイズのファイルをWebサービスで転送するには?
または、転送に時間がかかりすぎて、IISのtimeoutを起こすような場合は?
ファイルの転送状況を実況したい場合には?
これを解決するために、ファイルのチャンク転送を行う。
DIMEの問題点:
バイナリデータをSoapEnveropeの外側に出していた。
- >SOAPメッセージは安全でも、その添付されているバイナリデータが
安全であるという保障はない。
MTOMはWS-* specificationに準拠し、かつ安全である。
ファイルのチャンク送信Webサービスメソッド
ws.AppendChunk(FileName, Buffer, SentBytes, BytesRead);
FileName 送信するファイル名
Buffer チャンクデータ
SentBytes 現在送信しているデータのオフセット
BytesRead チャンクデータのサイズ
'BackgroundWorker' クラスについて (.NET 2.0から)
http://www.atmarkit.co.jp/fdotnet/special/pdc2003/pdc2003_03.html
デリゲートの非同期実行時にスレッドに関する配慮を軽減するためのユーティリティクラス、といったところでしょうか。
さらに、MD5チェックサム計算をチャンクごとに実行するために、マルチスレッドで
処理して、実行性能をあげている。
しかし、ここまでくると一種の転送プロトコルだよねえ・・・。
そこまでして実装すべきかなあ?
大きなファイルの転送には、
・MTOMでのチャンク転送
・Webサービスで認証し、認証を委任した別の転送プロトコルで転送
例: Webサービスでワンタイムパスワード生成
httpプロトコルでGETパラメータにワンタイムパスワードを追加
SAML的なアプローチをすると、認証が統合されるために、
ファイル転送もWebサービス経由でしなければならないか?
SAMLを使うと、
1)ユーザー認証、シングルサインオン
2)ダウンロード担当サーバがSAMLでユーザーの認証をし、
ダウンロード用のワンタイムパスワードを支給
3)HTTPプロトコル+ワンタイムパスワードによるダウンロード
かなあ。面倒だなあ。
GridFTPはこの辺が統合化されているんだけど、結局、ファイアウォールがどうしても邪魔になるんだよね。
また、クライアントがまだ対応できないだろうし。
Grid Computingの場合、クライアント側が参加しやすい環境がまだないんだよね。
なので、どうしてもポータルサービスはまだ必要だし、そのポータルサービスも
出来るだけ簡単なものにしたいが、セキュリティや分散認証も実現したい。
難しいところ。