2014-02-06 2 views
0

설치 : asp.net/c#에 양식이 있습니다. 제출시 XML이 개체 모델을 serialize하고 XML serialize 된 데이터를 유일한 매개 변수로 사용하여 저장 프로 시저를 호출합니다. . 저장 프로 시저가 해당 데이터를 SQL 브로커 큐로 보냅니다. 브로커 큐로 보낸 메시지는 큐에 설정된 메시지 계약을 준수하는 유효한 XML이어야합니다. 이 메시지는 BizTalk에서 가져 와서 적절하게 처리됩니다.SQL Service Broker Queue 메시지의 외래 문자 처리

문제점 : 원래 나에게 제출 된 데이터는 정규 영어 문자 (기본적으로 ASCII 문자 세트로되어 있음) 였지만 외국 문자도 지원해야한다는 요구 사항이 있습니다. 내 테스트에서 외국 문자 (중국어, 아랍어 등)를 사용하여 제출하려고하면 대기열에 오류가 발생하고 BizTalk에 도착하는 메시지는 "?????"로 끝납니다. 외국 문자 대신. 나는 문서 상단에 utf = 16 xml 헤더를 추가했으나 도움이되지 않습니다.

질문 : 들어오는 XML 메시지를 nvarchar로 캐스팅하고 큐에 의해 유효한 XML로 간주되는 방법이 있습니까? 큐의 실제 유형을 변경하거나 다시 만들고 싶지 않습니다. 저장 프로 시저에서 메시지를 큐에 넣을 수있는 방법으로 변경하는 것을 선호합니다.

미리 도움을 주셔서 감사합니다.

답변

0

HTML5를 사용하여 문자를 인코딩 한 다음 보안을 이스케이프 처리하여이 문제를 처리했습니다. 이 인코딩을 처리하기 위해 HttpUtility 라이브러리를 사용하여 몇 가지 문제가 발생하여 인코딩을 처리하는 데 사용 된 메서드를 추가했습니다. 나는 이것에 대한 직접 신용을 줄 수 있으면 좋겠다

, 나는 그것이 누구 이건 당신을 내가 이걸 발견 위치를 기억하지만 감사 할 수 없습니다

private string EncodeToHTML(string text) { // call the normal HtmlEncode first char[] chars = HttpUtility.HtmlEncode(text).ToCharArray(); StringBuilder encodedValue = new StringBuilder(); foreach (char c in chars) { if ((int)c > 127) // above normal ASCII encodedValue.Append("&#" + (int)c + ";"); else encodedValue.Append(c); } return encodedValue.ToString(); }