ファイルの中身を返すWebサービス(ASP.NETのXML SOAP)を作っていて、改行コードを含む文字列を返すときに、返ってきた文字列の改行コードが、本当はCR+LFだったのがLFのみになる現象がありました。
これを、SoapHttpClientProtocolを継承したプロキシクラス(自動生成されるクラス)で呼び出すと、
text変数の中身が、"Hage\r\nHoge\r\n"ではなく、"Hage\nHoge\n"になってしまう。
ぐぐったら、同じような問題に悩む人がいたようなので、↓のような情報まではすぐ見つかったんだけど、
肝心の、「じゃ、どう書けばいいの?」が見つからなくて、いろいろ探し回りました。
Webメソッドのstring型の戻り値に含まれる改行コードが変換されてしまう
SoapHttpClientProtocol.GetReaderForMessageをオーバーライドすればいい、という情報を得て、
.NET Reflectorで中身を確認したところ、XmlTextReaderのインスタンスをアップキャストして返してるのがわかったので、XmlTextReader.Normalizationをfalseにすることで解決。
コードにしたらこういう感じ。
自動生成のコードには手を入れたくないので、パーシャルクラス様様です。
XMLの標準規格が影響してるようですね。詳細は長いし、理解が不正確なので書きませんが。