SQL Service Broker队列处理消息中的外来字符

时间:2014-02-06 20:42:01

标签: c# sql queue broker

设置:我有一个用asp.net/c#构建的表单,在提交时,XML序列化它的对象模型并使用该XML序列化数据作为唯一参数调用存储过程。存储过程将该数据发送到sql代理队列。发送到代理队列的消息必须是符合队列上设置的消息协定的有效XML。该消息由BizTalk接收并相应处理。

问题:最初提交给我的数据只是普通的英文字符(基本上是ASCII字符集),但是还有一个要求就是支持外来字符。在我的测试中,我注意到如果我尝试提交带有外来字符(中文,阿拉伯语等)的内容,我会在队列中收到错误,并且获得BizTalk的消息最终会以“?????”结束代替外国人物。我已将utf = 16 xml标题添加到文档的顶部,但这似乎没有帮助。

问题:有没有办法可以将传入的XML消息转换为nvarchar,并且仍然可以将其视为队列中的有效XML?我不想更改队列上的实际类型或重新创建它。我更喜欢以某种方式改变存储过程中的消息,允许它进入队列。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分: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(); }