为什么我突然在.NET Web服务中看到字节顺序标记?

Eug*_*atz 7 .net web-services byte-order-mark sharepoint-2007 character-encoding

我已经编写了一个ASMX Web服务,该服务已经在生产中运行多年.今天,Java客户端突然在尝试解析响应时抛出错误.我们将其跟踪到XML声明之前出现的BOM(字节顺序标记):

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: text/xml; charset=utf-8
Content-Encoding: gzip
Expires: -1
Vary: Accept-Encoding
Server: Microsoft-IIS/7.0
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
MicrosoftSharePointTeamServices: 12.0.0.6300
Date: Wed, 22 Jun 2011 19:59:49 GMT
Content-Length: 3629

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap...
Run Code Online (Sandbox Code Playgroud)

该代码在一年多内没有改变.Web服务在IIS中的MOSS 2007站点下运行,您可以从上面的HTTP标头中看到,但它有自己的web.config.

据我们所知,服务器的配置没有任何重大变化,但它必定是一些东西.可能导致这种情况的任何想法?

如果我们无法追踪并恢复更改,那么下一个问题是,我可以在我的代码中修复此问题吗?

这是一个带有.asmx文件的vanilla ASMX Web服务,如下所示:

<%@ WebService Language="c#" Codebehind="MyStuff.asmx.cs" Class="MyStuff.MyService" %>
Run Code Online (Sandbox Code Playgroud)

和.asmx.cs文件看起来像这样:

public class MyService : System.Web.Services.WebService {
    ...

    [WebMethod(CacheDuration = 30, Description = "This does something", MessageName = "GetMyStuff")]
    public XmlDocument GetMyStuff(string param) {
        return doGetStuff(param)
    }
    private XmlDocument doGetStuff(string param) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我看过一些关于BOM问题的帖子,但由于我只是返回一个XML文档而框架正在处理流回客户端,我不确定我是否可以做任何事情.

更新:我发现我们的舞台服务器上不存在BOM问题.可能是另一条线索是什么; 当soapUI显示来自prod的原始响应时,它具有BOM和SOAP XML外观格式(多行和缩进).当我在舞台上看时,没有BOM,整个响应都在一行上.所以其他也被添加了BOM.

Eug*_*atz 2

跟踪问题到 web.config 中的以下条目:

   <webServices>
      <soapExtensionTypes>
        <add type="Cognos.Portal.Services.SoapPatchExtension, Cognos.BI.WebPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cb3c72729d0875cd" priority="1" group="0" />
      </soapExtensionTypes>
    </webServices>
Run Code Online (Sandbox Code Playgroud)

这是作为 Cognos Web Part 推出的一部分添加的配置,然后被注释掉。由于某种原因,SharePoint 决定将其放回原处。

进一步阅读表明该修复是“升级到 IBM Cognos Business Intelligence 10.1 Fix Pack 1”。

此外,同时用户报告SharePoint 的“在数据表中编辑”“导出到 Excel”功能出现故障。根本原因是一样的