2011-12-28 12 views
1

私のRESTful WCF 3.5サービスは、フリーフォーム文字列フィールドを含むXmlSerialized(シリアル化されたDataContract)データオブジェクトを受け入れます。WCF 3.5 REST - r nを nに置き換えたデータメンバ

私はこのようなXMLを送信(WCFサービスと対話するためのHttpWebRequest/HttpWebResponseのを使用する)を書いたクライアント:

<product> 
    <description>Foo\r\nBar\r\n\r\nFinal line</description> 
</product> 

(CRとLF文字は、生のASCII現実には、見やすさのためにここにエスケープされていますWiresharkで確認されているように、バイト0x0Aと0x0Dがワイヤーに送られます)。

ただし、私のWCFサービスの[OperationContract]マークのメソッドはすべて、Product.Descriptionプロパティの値が "Foo \ nBar \ n \ nFinal line"であることを報告します。これは私のコードが呼び出される前に起こります。

WCFのどこかで文字列の改行文字が削除され、\ n改行文字に置き換えられますが、これが起こっている場所や理由がわかりません。

答えて

3

これは実際にはXML仕様であるhttp://www.w3.org/TR/REC-xml/#sec-line-endsで義務づけられています。「XMLプロセッサは、構文解析前に外部解析エンティティ(ドキュメントエンティティを含む)内のすべての改行を解析したように振る舞います。 #xD #xAと#xAが1つの#xA文字に続いていない任意の#xD "。

"\ r"を保持したい場合は、サーバに送信する前にエスケープして(&#xD;に)、正規化されないようにする必要があります。

<product> 
    <description>Foo&#xD;\nBar&#xD;\n&#xD;\nFinal line</description> 
</product> 

あなたはXmlWriterで、このXMLを生成している場合は、NewLineHandling.EntitizeにそのNewLineHandlingプロパティを設定してXmlWriterSettingsを渡すものを作成することができ、これはあなたのために行われます。

+0

ありがとうございます! – Dai

関連する問題