0

structWCF サービスで次のように定義しました。

[Serializable]
[DataContract]
public struct CompositeKey : 
   IComparable, IComparable<CompositeKey>, IEquatable<CompositeKey>
{
    [DataMember]
    public long Primary { get; private set; }

    [DataMember]
    public byte Secondary { get; private set; }

   //others
}

これは、他のデータ コントラクトのメンバーとして使用されます。

[DataContract]
public class PatternFrequencyArgs
{
  [DataMember(IsRequired=true, EmitDefaultValue=false)]
  public CompositeKey PatternKey { get; set; }

  [DataMember(IsRequired = true)]
  public CompositeKey SessionStatKey { get; set; }

  [DataMember]
  public int Frequency { get; set; }
}

クライアント側では、次のwsutil.exe構造体を生成します。

typedef struct PatternFrequencyArgs 
{
    int Frequency;
    struct CompositeKey* PatternKey;     //why pointer?
    struct CompositeKey* SessionStatKey; //why pointer?
} PatternFrequencyArgs;

ご覧のとおり、CompositeKeyメンバーはポインターとして生成されます。それらをポインターにしたくありません。それを回避し、代わりに非ポインターメンバーとして生成するにはどうすればよいですか?

上記の構造体が生成される関連する XSD は次のとおりです (推測します)。

<xs:complexType name="PatternFrequencyArgs">
    <xs:sequence>
      <xs:element minOccurs="0" name="Frequency" type="xs:int" />
      <xs:element xmlns:q6="http://schemas.etc..." name="PatternKey" type="q6:CompositeKey">
        <xs:annotation>
          <xs:appinfo>
            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.etc..." />
          </xs:appinfo>
        </xs:annotation>
      </xs:element>
      <xs:element xmlns:q7="http://schemas.etc..." name="SessionStatKey" type="q7:CompositeKey" />
    </xs:sequence>
</xs:complexType>
4

0 に答える 0