【问题标题】:ASMX web service Enum not retaining its valueASMX Web 服务枚举未保留其值
【发布时间】:2023-03-29 03:12:01
【问题描述】:

我创建了一个 Web 服务,其中包含一个枚举值,如下所示

public enum DesignChoice
{            
    DesignerChoice = 1,
    CustomerChoice = 2,
    AdditionalDesign=3,
}

当我添加对我的客户网站的引用时,枚举值会按照以下代码进行更改:

(int)DesignChoice.AdditionalDesign 返回 2,但我希望它是 3。

我突然尝试了序列化属性[System.Xml.Serialization.XmlTypeAttribute()],但没有运气。

服务的WSDL对枚举的描述如下:

 <s:simpleType name="DesignChoice">
        <s:restriction base="s:string">
          <s:enumeration value="DesignerChoice" />
          <s:enumeration value="CustomerChoice" />
          <s:enumeration value="AdditionalDesign" />
        </s:restriction>
      </s:simpleType>

当我在 VS 的类名上按 F12 时,它会显示以下从元数据生成的代码:

public enum DesignChoice
    {
        DesignerChoice = 0,
        CustomerChoice = 1,
        AdditionalDesign = 2,
    }

我正在使用 Visual Studio 2005 和 .NET 2.0。

【问题讨论】:

  • 你确定你调用的是正确的页面吗?我做了一个快速测试,它按预期返回 3。请记住:您不应该在 asp.net 中使用 Response.Write。你能调试你的代码吗?
  • 是的,我做了调试,但值是一样的
  • 对了,为什么不用Response.Write呢?
  • 您的代码中是否有另一个 DesignChoice 实现?当光标在 DesignChoice 上时,按 F12 进入定义。看看你生成的 HTML,你就知道为什么不应该使用 Response.Write。输出在顶部。我假设你也有一个 .aspx 页面(?)
  • 听起来你有一个旧版本,或者类似的东西。

标签: c# asp.net enums .net-2.0 asmx


【解决方案1】:

【讨论】:

    【解决方案2】:

    发送到您的服务和从您的服务发送的值将是代表您的枚举的字符串,例如&lt;DesignChoice&gt;CustomerChoice&lt;/DesignChoice&gt;

    您的服务中 this 的值应该是正确的,但由于任何客户端上的数字信息可能不同,因此客户端上的值可以是任何值。只要他们发回正确的字符串值,这无关紧要。如果客户端明确依赖编号,则客户端可能存在设计缺陷,或者您的服务在调用时需要整数,而它本应使用 Enum。

    【讨论】:

    • 但在这种特殊情况下我们需要数值
    猜你喜欢
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 2012-04-17
    • 2010-09-05
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多