当我使用枚举类型时,为什么我的WCF服务代理会创建一个奇怪的方法

本文关键字:创建 一个 方法 代理 服务 枚举 类型 WCF 我的 为什么 | 更新日期: 2023-09-27 17:58:04

我在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。如果我将布尔参数设置为true,它将返回我实际指定的任何可枚举值。

当我使用枚举类型时,为什么我的WCF服务代理会创建一个奇怪的方法

这是因为布尔值指示是否已提供枚举参数。如果没有,那么它将表现为您提供了整数值为零的枚举。

话虽如此,我不明白为什么会有"指定的*"。根据您的代码,枚举必须始终存在。如果你指定了CarConditionEnum?,那么我会理解的。

你确定这是WCF服务吗?这看起来像是ASMX的开场白。

相关文章: