Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL Service Broker队列处理消息中的外来字符_C#_Sql_Queue_Broker - Fatal编程技术网

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

C# SQL Service Broker队列处理消息中的外来字符,c#,sql,queue,broker,C#,Sql,Queue,Broker,设置:我在asp.net/c中构建了一个表单,在提交时,XML序列化它的对象模型,并调用一个存储过程,其中XML序列化数据作为唯一参数。存储过程将该数据发送到sql代理队列。发送到代理队列的消息必须是遵守队列上设置的消息约定的有效XML。BizTalk会拾取该消息并进行相应的处理 问题:最初提交给我的数据只是普通的英文字符(基本上保持为ASCII字符集),但也需要支持外来字符。在我的测试中,我注意到,如果我尝试提交带有外来字符(中文、阿拉伯语等)的内容,我会在队列中收到一个错误,到达BizTal

设置:我在asp.net/c中构建了一个表单,在提交时,XML序列化它的对象模型,并调用一个存储过程,其中XML序列化数据作为唯一参数。存储过程将该数据发送到sql代理队列。发送到代理队列的消息必须是遵守队列上设置的消息约定的有效XML。BizTalk会拾取该消息并进行相应的处理

问题:最初提交给我的数据只是普通的英文字符(基本上保持为ASCII字符集),但也需要支持外来字符。在我的测试中,我注意到,如果我尝试提交带有外来字符(中文、阿拉伯语等)的内容,我会在队列中收到一个错误,到达BizTalk的消息最后会以“??”代替外来字符。我已经将utf=16 xml头添加到文档的顶部,但这似乎没有帮助

问题:有没有一种方法可以将传入的XML消息强制转换为nvarchar,并且仍然让队列认为它是有效的XML?我不想更改队列的实际类型或重新创建它。我更愿意以某种方式单独更改存储过程中的消息,使其能够进入队列


提前感谢您的帮助。

我最终通过使用HTML5对字符进行编码,然后对其进行安全转义来处理这个问题。我在使用HttpUtility库处理这种编码时遇到了一些问题,因此我添加了用于处理编码的方法

我希望我能直接归功于这一点,我不记得我在哪里找到了这一点,但感谢你,无论是谁:


私有字符串EncodeToHTML(字符串文本)
{ 
//首先调用普通的HtmlEncode
char[]chars=HttpUtility.HtmlEncode(text.tocharray();
StringBuilder encodedValue=新的StringBuilder();
foreach(字符中的字符c)
{
如果((int)c>127)//高于标准ASCII
encodedValue.Append(&#“+(int)c++“;”);
其他的
encodedValue.Append(c);
}
返回encodedValue.ToString();
}