1

在 ASMX Web 服务中,GetProductListModulesOnPage 方法返回 ProductListModule 对象的列表。ProductListModule 类来自 2 个来源:

  1. Entity Framework 4 实体(使用 POCO 模板生成)
  2. 添加单个额外属性的部分类声明如下:

    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 没有任何意义!

4

0 回答 0