2014-02-06 45 views
0

設置:我有建於asp.net/c#的形式,在提交XML序列化它的對象模型,並使用XML調用存儲過程序列化的數據作爲唯一的參數。存儲過程將該數據發送到sql代理隊列。發送到代理隊列的消息必須是符合隊列中消息協定的有效XML。該消息被BizTalk拾起並進行相應處理。SQL Service Broker的隊列處理外國字符的消息中

問題:最初提交給我的數據只是普通英文字符(基本上舉行ASCII字符),但要求是在地平線上,支持外國字符爲好。在我的測試中,我注意到如果我嘗試使用外來字符(中文,阿拉伯文等)提交某些內容,我會在隊列中出現錯誤,並且發送到BizTalk的消息以「?????」結尾。代替外國字符。我已經將utf = 16 xml標題添加到文檔的頂部,但這似乎沒有幫助。

問:是否有一種方法,我可以通過隊列投傳入的XML消息爲nvarchar而且還有它被認爲是有效的XML?我不想更改隊列上的實際類型或重新創建它。我寧願以某種方式改變存儲在proc中的消息,以使其進入隊列。

在此先感謝您的幫助。

回答

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(); }

相關問題