ASMX Web サービスでは、メソッド GetProductListModulesOnPage が ProductListModule オブジェクトのリストを返します。ProductListModule クラスは、次の 2 つのソースから取得されます。
- Entity Framework 4 エンティティ (POCO テンプレートを使用して生成)
次のように、単一の追加プロパティを追加する部分クラス宣言:
public partial class ProductListModule { public bool IsNotActivated { get; set; } }
問題は、Web サービスの応答における IsNotActivated 要素の位置が、プロジェクトが構築されているマシンによって異なることです。次のように、同僚の PC では一番上に表示されますが、私の PC では一番下に表示されます。
<?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への変換を提案するポイントはありません!!