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

vi4fp9gy  于 2023-10-24  发布在  .NET
关注(0)|答案(1)|浏览(144)

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

代码在一年多的时间里没有改变。Web服务在IIS中的MOSS 2007站点下运行,正如你可以从上面的HTTP头看到的,但是有自己的web.xml。
据我们所知,服务器的配置没有任何重大变化,但肯定有什么变化。有什么想法可能导致这种情况吗?
如果我们不能跟踪和恢复更改,下一个问题是,我可以在代码中修复它吗?
这是一个带有.asmx文件的ASMX Web服务,看起来像这样:

<%@ 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) {
        ...
    }
}

我看过some posts,它讨论了BOM问题,但由于我只是返回一个XML文档,而框架负责将数据流返回到客户机,因此我不确定我是否能对此做些什么。

**更新:**我发现我们的stage服务器上不存在BOM问题。另一个可能的线索是;当soapUI显示来自prod的原始响应时,它有BOM,SOAP XML看起来格式化(多行和缩进)。当我在stage上查看时,没有BOM,整个响应都在一行上。所以其他也与BOM一起添加。

mmvthczy

mmvthczy1#

在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决定将其放回去。
Further reading建议修复为“升级到IBM Cognos Business Intelligence 10.1 Fix Pack 1”。
此外,同时用户报告说,SharePoint的 * 在数据表中编辑 * 和 * 导出到Excel* 功能破坏了.It's the same root cause

相关问题