1

WCFサーバー側で次の列挙型を定義しました。

[DataContract]
public enum CarConditionEnum {
    [EnumMember]
    New,
    [EnumMember]
    Used,
    [EnumMember]
    Rental,
    [EnumMember]
    Broken,
    [EnumMember]
    Stolen
}

私が使用する操作コントラクトメソッドインターフェイスメソッド、サーバー側も:

[OperationContract]
string WhatEnumDidIUse(CarConditionEnum carCondition);

このインターフェース(サーバー側)のメソッド実装:

public string WhatEnumDidIUse(CarConditionEnum carCondition) {
    return carCondition.ToString();
}

このサービスへのプロキシを動的に生成すると、生成されるメソッドは次のようになります(Web参照を使用して生成した場合も同じように見えると確信しています)。

/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/IService1/WhatEnumDidIUse", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
[return: System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
public string WhatEnumDidIUse(CarConditionEnum carCondition, [System.Xml.Serialization.XmlIgnoreAttribute()] bool carConditionSpecified) {
    object[] results = this.Invoke("WhatEnumDidIUse", new object[] {carCondition, carConditionSpecified});
    return ((string)(results[0]));
}

列挙可能オブジェクトが指定されたことを指定するこのブール値があるのはなぜですか?

また、なぜこのブール値は奇妙に動作するのですか?たとえば、ブール引数をfalseに設定すると、メソッドは常に最初の列挙可能なNewを返します。boolean引数をtrueに設定すると、実際に指定した列挙可能なものが返されます。

4

1 に答える 1

2

これは、ブール値がenumパラメーターが指定されているかどうかを示しているためです。そうでない場合は、列挙型に整数値ゼロを指定したかのように動作します。

そうは言っても、なぜ「*指定」があるのか​​わかりません。コードに基づいて、列挙型は常に存在する必要があります。あなたが指定したならCarConditionEnum?、私はそれを理解するでしょう。

これがWCFサービスであると確信していますか?それはASMXプロローグのように見えます。

于 2013-02-06T14:19:32.860 に答える