2

テスト目的で別の環境で既存の Web サービスをモックしようとしていますが、障害が発生しました。

このモック サービスを WCF で作成しようとしています

私がモックしているサービス (WCF では開発されていません) には、次の型定義を持つエンティティがあります。

<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="dog" nillable="true" type="xs:string"/>

</xs:sequence>

maxOccurs="unbounded" メッセージ自体が次のようになっていることに注意してください。

<dog>1</dog>
<dog>2</dog>

しかし、これに対処するために DataContract を定義する方法がわかりません。次のような配列型を使用すると仮定しました。

    [DataContract]
    public class P56040Input
    {
        [DataMember]
        public string[] dog { get; set; }


    }

対応しますが、新しいタイプ (arrayofstring) で予期しないことを行います。

<xs:sequence>
<xs:element xmlns:q1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" minOccurs="0" name="dog" nillable="true" type="q1:ArrayOfstring"/>
</xs:sequence>

これはWCFでモックすることさえ可能ですか?

4

1 に答える 1

5

ArrayOfString 定義に移動すると、maxOccurs=“unbounded” があることがわかります。したがって、ここに表示されるのは、生成されたラッパー タイプ wcf だけです。このような型を生成しないためには、データ コントラクトではなく xml シリアライザーを使用する必要があります。定義は次のようになります。

[System.Xml.Serialization.XmlElementAttribute("dog")]
public string[] dog  {get; set;}

どうやって知ったの?必要なのは、wsdl に「Web 参照を追加」することだけです (これにより、クライアント プロキシが生成されます)。次に、関連するプロキシ パーツを見て、型の上にある属性を確認します。デフォルトでデータ コントラクトを使用する「サービス参照の追加」で同じことを行うことができ、使用したものが生成されたことを確認できますが、これは必要なものとまったく同じではありません。

于 2012-06-14T21:56:39.960 に答える