背景: asmx Web サービスからのインバウンド/アウトバウンド Soap メッセージをログに記録する単純な SoapExtension クラスを作成しようとしています。msdnのこの記事に従って、私は物事を機能させることができました。ただし、コードをコピーして貼り付けるだけでなく、なぜ/どのように機能するのかを理解したいと思います。
質問: 具体的に把握するのに苦労しているのは、例の IO ストリームの処理です。私がウェブで読んだ他のすべての記事は、同じ方法でストリームを処理します...最初に元のストリームへの参照を取得し、メモリ内に「作業中の」ストリームを作成し、次に必要に応じて内容を交換します。
最初の質問は、このコンテキストでの「ストリーム チェーン」とはどういう意味ですか? ストリームについての私の理解は、任意のストリームに書き込むと、パイプラインの「内部」ストリームに自動的に書き込まれるということです。その場合、あるストリームから別のストリームにコンテンツを手動でコピーする必要があるのはなぜですか?
2 番目の質問は、Copy メソッドの例では、StreamReader と StreamWriter を破棄せずに毎回作成しています。これは GC に余分な圧力をかけていませんか? トラフィックの多い Web サービスで必要なものとは思えません...両方を using ステートメントでラップしようとしましたが、リーダー/ライターを破棄するとストリームも閉じられ、より深刻なエラーが発生しました。.NET 4 には新しい Stream.CopyTo(Stream) メソッドがありますが、.NET 3.5 のより良いアプローチは何でしょうか?