2010-11-25 5 views
0

WebAppでホストされているプロキシからデータを受け取るサービスがあります。 DataMembersはOrder = *で設定され、isRequired = trueを追加しようとしました。問題は、60のフィールドの情報がシリアライズされ、デシリアライズされ、同じ3つのStringフィールドが一貫して欠落していることです(null)。私はデータがクライアントブラウザからプロキシサービス(JSONからシリアライズされている)までそのままであることを示すデバッグを実行しました。プロキシサービスは、Windowsサービスに送信します。Windowsサービスでは、デシリアライズ後に3つのフィールドが欠落しています。WCF DataContractデシリアライゼーションが欠落3つの文字列フィールドもオーダーが設定されています

フィールドの順序を違うように設定しようとしましたが、何も動作しないようです。それは常に同じ3つの欠けているフィールドの単純な文字列で、しばしば10-20文字を超えません。また、これらの面倒なDataMembersがプログラムの他のすべての領域に正しく配置されていることにも言及する価値があります。次のように

プロキシサービスコードがある

public TransactionResult Update(MyObj obj, String ItemOne, String ItemTwo) 
    { 
     MyService.MyServiceClient proxy = new MyService.MyServiceClient("WSHttpBinding_IMyService"); 
     proxy.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation; 
     TransactionResult result = proxy.Update(obj, ItemOne, ItemTwo); 
     proxy.Close(); 
     return result; 
    } 

Windowsサービスコードが

[OperationBehavior(Impersonation = ImpersonationOption.Required)] 
public TransactionResult Update(MyObj obj, String ItemOne, String ItemTwo) 
{obj is missing same 3 values at this point...} 

オブジェクトのDataMembers

[DataMember(Order = 56)] 
    public String ItemTwo 
    { 
     get 
     { 
      ... 
     } 
     set 
     { 
      ... 
     } 
    } 

答えて

0

アイデアの一つの例です。

  • 連載は帯域幅に
  • メイクを最適化するために、これを使用すると、あなたはのDefaultValue属性を定義していないことを確認してください
  • (deserializatin順序に依存するため、リセットしたり、コードに変更)、これらのフィールドが計算されていないことを確認してくださいあなたは別のWCFは、OnDeserialized上(HTTP、NETTCP、...)
  • フックを結合事象をOnDeserializingし、データをチェックしてみてください
  • これらのフィールドをハックするだろういくつかのカスタム動作を宣言していないことを確認
があります
0

チェックするべきことの1つは、シグネチャ内の追加のパラメータがエンティティのプロパティと同じ名前である可能性があります。

なぜ

public TransactionResult Update(MyObj obj, String NewItemOne, String NewItemTwo) 
に(クライアント・サービス参照/プロキシをREGENすることを忘れないでください)

public TransactionResult Update(MyObj obj, String ItemOne, String ItemTwo) 

を署名パラメータの名前を変更しません

関連する問題