【问题标题】:ASMX Web Service using wrong encoding on incoming requestASMX Web 服务对传入请求使用错误的编码
【发布时间】:2012-04-19 02:55:16
【问题描述】:

我的 .NET ASMX Web 服务正在接受来自我无法直接控制的客户端的请求。它正在发送如下所示的请求:

POST /Service.asmx HTTP/1.1
Connection: Keep-Alive
Pragma: no-cache
Content-Length: 1382
Content-Type: text/xml
Accept: text/xml
Host: localhost
User-Agent: Borland SOAP 1.1
SOAPAction: "http://domain.com/InsertRecords"

<?xml version="1.0"?>
<SOAP-ENV:Envelope... <v>ÄLMÅ BÄCK</v></SOAP-ENV:Envelope>

在我的 WebMethod 中,字符串 ÄLMÅ BÄCK 被转换为 ??LM?? B??CK——典型的编码混乱。

在我的测试中,我发现如果我只是调整内容类型标题,一切都很好:

Content-Type: text/xml; charset=utf-8

为什么 .NET 在未指定时选择 utf-8 以外的编码,有什么办法可以强制此 ASMX 使用 UTF-8 编码?

【问题讨论】:

    标签: asp.net web-services encoding character-encoding asmx


    【解决方案1】:

    以下代码在调用 Web 服务处理程序之前运行导致 HTTP 请求正确解码:

    if (HttpContext.Current.Request.ContentType == "text/xml") {
        HttpContext.Current.Request.ContentType = "text/xml; charset=UTF-8";
    }
    

    这感觉有点老套,但我相信它适合我的情况。我仍然对一些关于为什么这是一个问题的背景信息非常感兴趣,以及是否有更好的方法来解决这个问题(除了让客户更明确地了解编码)。

    【讨论】:

      【解决方案2】:

      IIS 7.5 有配置选项来帮助解决这个问题。 (我不知道早期版本是否支持这一点。)我有一个类似的问题,我有一个 Web 应用程序接收来自系统的请求,该系统使用扩展 ASCII 字符集的前 5 个字符作为有意义的分隔符。这些被 IIS 应用于传入请求的解码所破坏。我找到了一些 IIS 配置选项来解决这个问题。


      首先,在 IIS 管理器中,选择您的网站并打开 .NET 全球化设置:


      文件、请求、响应标头和响应的预期编码设置。有数十种编码选项可供选择:


      这非常适合我的场景,因为这个特定的站点只接收来自我编写的程序的请求,所以我控制了两端。对于未知的受众,您只是希望您的用户对他们的请求进行适当的编码。 (但是,即使您使用默认编码也是如此......)

      【讨论】:

        猜你喜欢
        • 2011-02-07
        • 1970-01-01
        • 1970-01-01
        • 2011-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多