【发布时间】:2014-04-06 00:31:36
【问题描述】:
我有一个 C# WCF 服务正在运行,它需要接受 ISO-8859-1 中的消息。一切正常,直到有人发送包含特殊字符(例如 ä 或 ö)的消息。
如果字符被编码(ä 到 \344 或 ä)一切正常,但发件人坚持如果邮件是 ISO-8859-1,则不需要转义。
更具体地说,这是可行的(简化示例):
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
a
</soap:Body>
</soap:Envelope>
(当然会因为语法无效而引发另一个异常,但传输本身很好)。
这不起作用:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
ä
</soap:Body>
</soap:Envelope>
并抛出一堆神秘的错误消息,无处可去:
<ExceptionType>System.ServiceModel.CommunicationException, System.ServiceModel, ...</ExceptionType>
<Message>The I/O operation has been aborted because of either a thread exit or an application request</Message>
...
<ExceptionType>System.ServiceModel.CommunicationException, System.ServiceModel, ...</ExceptionType>
<Message>An operation was attempted on a nonexistent network connection</Message>
我尝试使用空的 App.config 运行服务,但问题仍然存在,所以我很确定问题不在于我创建服务的方式,而在于 WCF 处理消息的方式.将编码更改为 UTF-8 也无济于事。
知道为什么单个变音符号会如此灾难性地破坏服务吗? XML 应该支持 ASCII 以外的编码,那么这里有什么问题呢?有什么我可以做的改变,或者如果所有希望都落空了,我怎么能说服发件人对他们的特殊字符进行编码?
【问题讨论】:
-
类似问题:stackoverflow.com/questions/5369462/… 可能有帮助。
标签: c# .net wcf character-encoding