0

バックグラウンド

WCFサービスへのリクエストの一部として、列挙値Add(詳細については以下を参照)を渡しますが、共有ライブラリの列挙オブジェクト(基本的に同じでAutoMapperを使用してマップされます)を使用するサービス実装、最初のメンバー、つまりEqualしか読み取れないようです。つまり、ユーザーはAddを入力しますが、サービスの実装はEqualを取得します。

詳細

私は次のように定義された列挙型を持っています

[DataContract]
public enum MyOperator
{
    [EnumMember]
       Equal = 0,
    [EnumMember]
     Add = 1,
      [EnumMember]
Subtract = 2
}

この列挙型は、次のように別のデータコントラクトのプロパティです。

[DataContract]
public class MyExpression
{
 [DataMember]
  public string Field {get;set;}

 [DataMember]
  public string Value{get;set;}

 [DataMember]
  public MyOperator Operator {get;set;}

}

最後に、これは私のリクエスト本文に含まれています。

[DataContract]
public class RequestBody
{
...

public MyExpression Expression {get;set;}
...
}

対応する列挙型オブジェクトは共有ライブラリにあり、次のように定義されます。

    public enum MyOperator
    {
           Equal = 0,
           Add = 1,
       Subtract = 2
    }

(この共有ライブラリのMyOperator列挙型を使用する)サービス実装のデバッグ中に、私が観察している問題は、ユーザーがSoapリクエストの一部としてAddを入力したにもかかわらず、毎回Equalが表示されることです。

MyOperatorとして宣言してKnownTypeみましたが、役に立たなかったようです。

助けてくれてありがとう!追加の詳細が必要な場合はお知らせください

4

2 に答える 2

0

あなたのサービスは、リクエストで渡した値を見つけられず、列挙型の最初の値を取得しているようです。できることは、WSDL の定義を更新して、要求を再実行することです。これで問題は解決するはずです。これでうまくいきました。うまくいかない場合はお知らせください。

于 2013-03-26T23:06:55.450 に答える
0

これ以上の情報がないと推測するのは難しいですが、私の最初の推測では、文字列「等しい」を int に変換しようとして失敗し、0 (デフォルトの int) が返されます。

私が思いつく他の唯一のことは、2つの列挙型が異なる名前空間にあるため、2つの列挙型の間で変換できない可能性があることです。

于 2013-03-16T03:28:43.130 に答える