Tat*_*nen 5 .net c# wcf character-encoding
我有一个C#WCF服务运行,需要接受ISO-8859-1中的消息.一切正常,直到有人发送包含特殊字符的消息,如ä或ö.
如果字符编码(äto \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>
Run Code Online (Sandbox Code Playgroud)
(但当然由于语法无效而引发另一个异常,但传输本身很好).
这不起作用:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
ä
</soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)
并抛出一堆无处可寻的神秘错误信息:
<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>
Run Code Online (Sandbox Code Playgroud)
我试图使用空的App.config运行该服务并且问题仍然存在,所以我很确定问题不在于我创建服务的方式,而在于WCF如何处理消息.将编码更改为UTF-8也无济于事.
知道为什么单个变音符号会破坏服务这么灾难性吗?XML应该支持除ASCII之外的编码,那么这里的交易是什么?我可以做任何改变,或者如果所有的希望都失去了,我怎么能说服发件人编码他们的特殊字符?
问题并不是我想的那样。
\n\n客户发送给我们的数据缺少正确的 xml 声明:
\n\n<?xml version="1.1" encoding="ISO-8859-1"?>\nRun Code Online (Sandbox Code Playgroud)\n\n至此,服务正常运行。
\n\n但我得到的异常是由我们自己测试连接的程序引起的。该程序是 WebServiceStudio,当我们尝试通过它发送特殊字符(特别是\xc3\xa4)时,它完全失败:用 WireShark 检查时,消息正文完全不存在。
因此,最初我们以为客户遇到了与我们相同的问题,但是当我们注意到我们的测试失败时,很快就找到了真正的原因,那就是 SOAP 消息中缺少 XML 声明。
\n| 归档时间: |
|
| 查看次数: |
1514 次 |
| 最近记录: |