Почему я внезапно вижу метку порядка байтов в своей веб-службе .NET?

Я написал веб-службу ASMX, которая уже много лет работает в производственной среде. Сегодня клиенты Java неожиданно выдают ошибки при попытке разобрать ответ. Мы отследили это до BOM (Byte Order Mark), появившейся перед объявлением XML:

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



и файл .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) {
        ...
    }
}

Я видел несколько сообщений , в которых говорится о проблеме спецификации, но поскольку я просто возвращаю XML документ и фреймворк заботятся о потоковой передаче обратно клиенту, я не уверен, что смогу с этим что-нибудь сделать.

Обновление: Я обнаружил, что проблем со спецификацией НЕ существует на нашем сценическом сервере. Что может быть еще одной подсказкой; когда soapUI показывает необработанный ответ от prod, у него есть спецификация, а SOAP XML выглядит отформатированным (многострочным и с отступом). Когда я смотрю на сцену, там нет спецификации, и весь ответ находится в одной строке. Таким образом, в спецификацию также было добавлено другое.

7
задан Eugene Katz 23 June 2011 в 15:38
поделиться