为什么我的.NET Web服务突然出现了字节顺序标记?

7

我编写了一个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...

这段代码已经一年多没有变化了。正如您从上面的HTTP标头中可以看到的那样,Web服务在MOSS 2007站点下运行于IIS中,但有自己的web.config。

据我们所知,服务器配置没有进行任何重大更改,但肯定发生了某些事情。有什么想法可能会导致这种情况发生?

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

这是一个普通的ASMX Web服务,其中包含以下内容的.asmx文件:

<%@ WebService Language="c#" Codebehind="MyStuff.asmx.cs" Class="MyStuff.MyService" %>

还有一个看起来像这样的 .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) {
        ...
    }
}

我看到一些帖子谈论了BOM问题,但由于我只返回一个XML文档,框架会处理流回客户端,我不确定我能否对此做出任何改变。
更新:我发现我们的阶段服务器上不存在BOM问题。另一个线索可能是:当soapUI显示来自生产环境的原始响应时,它具有BOM,并且SOAP XML看起来格式化(多行和缩进)。当我在阶段上查看时,没有BOM,整个响应都在一行上。因此,其他内容也添加了BOM。

Windows更新?我会回顾自上次良好状态以来服务器上的任何更改。 - Jon Seigel
我们正在尝试这样做。这在周二是有效的。周三,管理员安装了一个DocAv模板并重新启用了IIS。 - Eugene Katz
有趣。我也有时候在使用InfoPath表单时遇到这个问题。 - Dave Markle
1个回答

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>

这是一个作为Cognos Web Part推出的配置,后来被注释掉了。由于某种原因,SharePoint决定重新加入它。 进一步阅读建议解决方法是“升级到IBM Cognos Business Intelligence 10.1修复程序1”。
同时,用户报告称,在同一时间,SharePoint的“在数据表中编辑”和“导出到Excel”功能出现了问题。根本原因相同

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接