在 ASMX Web 服务中,GetProductListModulesOnPage 方法返回 ProductListModule 对象的列表。ProductListModule 类来自 2 个来源:
- Entity Framework 4 实体(使用 POCO 模板生成)
添加单个额外属性的部分类声明如下:
public partial class ProductListModule { public bool IsNotActivated { get; set; } }
问题是 Web 服务响应中 IsNotActivated 元素的位置会根据构建项目的机器而有所不同。在同事的电脑上,它出现在最顶部,而在我的电脑上,它出现在最底部,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetProductListModulesOnPageResponse xmlns="http://ecommerce.company.co.uk/">
<GetProductListModulesOnPageResult>
<ProductListModule>
<ListPageTabID>364</ListPageTabID>
<ListPageModuleID>872</ListPageModuleID>
<ListPageCategoryID>107</ListPageCategoryID>
<ProductCategory>
<CategoryID>107</CategoryID>
<CategoryName>Buff</CategoryName>
<ParentCategoryID>343</ParentCategoryID>
<Archived>false</Archived>
</ProductCategory>
<IsNotActivated>false</IsNotActivated>
</ProductListModule>
</GetProductListModulesOnPageResult>
<Success>true</Success>
<Message />
</GetProductListModulesOnPageResponse>
</soap:Body>
</soap:Envelope>
如果位置发生变化(并且服务引用未刷新),则 Web 服务客户端无法解释响应并引发异常。
我们看不出进行构建的机器之间有什么不同(相同的 VS 版本,相同的 EF 版本),而且我们都使用完全相同的源代码工作。
我们还尝试通过将以下属性添加到 IsNotActivated 属性来控制序列化顺序,但这没有效果。
[System.Runtime.Serialization.DataMemberAttribute(IsRequired = true, Order = 1)]
PS - 建议转换为 WCF 没有任何意义!