1

着信TCPネットワークストリームを読み取って、FTPサービスを介してAzureストレージにファイル(BLOB)をアップロードしようとしています。Uploadblobメソッドでstream.length、stream.seekなどの操作を実行しようとすると、次の未処理の例外が発生します。

 Unhandled Exception!
 Error ID: 0
 Error Code: Unknown
 Is Warning: False
Type: System.NotSupportedException
 Stack:    at     System.ServiceModel.Dispatcher.StreamFormatter.MessageBodyStream.get_Length()

回避策は、ストリームが使い果たされるまでストリームから読み取り、データをMemoryStreamにコピーすることです。着信ストリームをメモリストリームにコピーして作業するのではなく、誰かがより良い解決策(回避策)を取得したかどうかを知りたいです。

4

1 に答える 1

1

TCP はストリーム プロトコルであり、バイトは任意の速度で流れます。また、ネットワーク ストリームは、ストリームの一方の端によって閉じられるまで開いたままになります。これにより、通話中の特定の時点で正確な長さが得られない場合があります。ほとんどの場合、この理由によりこれらの例外が発生します。

あなたが述べたように、tcp ストリームのコンテンツをダンプできる独自のメモリストリームを取得したら、ストリーム内でより多くの制御を行うことができます。自分で管理するメモリストリームを取得したら、MemoryStream から blob を直接アップロードできます。

于 2012-10-10T19:35:25.800 に答える