У меня есть прямой сервис, например:
[ServiceContract]
public interface IService
{
[WebGet(UriTemplate = "/", ResponseFormat = WebMessageFormat.Xml)]
[OperationContract]
List<DataContracts.MyThing> Get();
}
Мой контракт данных прост, в нем нет ничего необычного:
[DataContract]
public class MyThing
{
[DataMember]
public string ID { get; set;}
}
Я использую WebServiceHostFactory вместо ручной привязки.
Когда я запускаю это в IIS 5.1 (Windows XP, моя локальная среда разработки), я получаю ответ, например:
<ArrayOfMyThing>
<MyThing></MyThing>
</ArrayOfMyThing>
Однако, когда я добавляю точно такой же код в IIS 6.0 в производственной коробке, я получаю ответ, например:
<ArrayOfMyThing
xmlns="http://schemas.datacontract.org/2004/07/My.NameSpace.DataContracts"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance"http://my.website.com/services/>
</ArrayOfMyThing>
Итак, мой вопрос двоякий:
- Почему он не обслуживает пространства имен в моей локальной среде разработки?
- Почему он создает плохой XML, добавляя базовый путь к службе внутри тега?
Очевидно, что плохой XML-узел ломает любой синтаксический анализатор, поэтому для меня это абсолютно бесполезно. Как ни странно, это происходит только на этом конкретном методе обслуживания, все остальные работают нормально и настроены так же.
РЕДАКТИРОВАТЬ: когда я использую JSON, все выглядит хорошо, поэтому я не думаю, что это проблема с WCF. Это должно быть проблемой сериализатора.