2011-12-28 2 views
1

내 RESTful WCF 3.5 서비스는 자유 형식 문자열 필드가 포함 된 XmlSerialized (직렬화 된 DataContract와 반대) 데이터 개체를 허용합니다.WCF 3.5 REST - r n이 n으로 대체 된 데이터 멤버

(HttpWebRequest를/HttpWebResponse 클래스 WCF 서비스와 상호 작용하는 데 사용) 내가 쓴 클라이언트는 전송과 같은 XML :

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

합니다 (CR 및 LF 문자가 현실 원시 ASCII에서, 가독성 여기 이스케이프 bytes 0x0A와 0x0D는 Wireshark로 확인 된 것처럼 전선 아래로 보내집니다).

그러나 내 WCF 서비스의 [OperationContract] 표시 방법은 모두 Product.Description 속성의 값이 "Foo \ nBar \ n \ n 최종"임을보고합니다. 이것은 내 코드가 호출되기 전에 발생합니다.

WCF의 어딘가에서 문자열의 줄 바꿈 문자가 제거되고 \ n 줄 바꿈으로 바뀌지 만 어디에서 또는 왜 이런 일이 발생하는지 알 수 없습니다.

답변

3

실제로는 XML 사양 인 http://www.w3.org/TR/REC-xml/#sec-line-ends에서 "XML 프로세서는 구문 분석 전에 외부 파싱 된 엔터티 (문서 엔터티 포함)의 모든 줄 바꿈을 파싱 전에 정규화 한 것처럼 동작합니다. 두 문자 시퀀스 #xD #xA와 하나의 #xA 문자가 #xA 뒤에 오는 모든 #xD ".

"\ r"을 보존하려면 서버에 보내기 전에이를 (&#xD;)로 이스케이프 처리해야 정규화되지 않습니다.

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

당신이 XmlWriter이 XML을 생성하는 경우

, 당신은 NewLineHandling.Entitize로 설정된 NewLineHandling 속성으로 XmlWriterSettings 전달을 만들 수 있습니다, 이것은 당신을 위해 수행됩니다.

+0

감사합니다. – Dai

관련 문제