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の場合、クライアント側が参加しやすい環境がまだないんだよね。
なので、どうしてもポータルサービスはまだ必要だし、そのポータルサービスも
出来るだけ簡単なものにしたいが、セキュリティや分散認証も実現したい。

難しいところ。