我有一个直截了当的服务,例如:
[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 的问题。它必须是一个序列化程序问题。