代码之家  ›  专栏  ›  技术社区  ›  Edo Tyler Wall

如何将枚举值传递到Web服务

  •  20
  • Edo Tyler Wall  · 技术社区  · 18 年前

    我的难题基本上是如何在两个应用程序之间共享枚举。

    用户通过网络上的前端应用程序上载文档。此应用程序调用后端应用程序的Web服务并将文档传递给它。后端应用程序保存文档并在 文件 表。

    文档类型(7种可能的文档类型: 发票联 , 合同 等)作为参数传递到Web服务的 上传文档 方法。问题是,这个参数的类型(和可能的值)应该是什么?

    因为您需要在两个应用程序中对这些值进行硬编码,所以我认为使用描述性字符串是可以的。( 发票联 , 合同 , 工作指令 , 图形命令 )

    这可能是创建一个 文档类型 枚举第一个应用程序,并在第二个应用程序中复制它,然后将相应的整数值传递给它们之间的Web服务?

    8 回复  |  直到 17 年前
        1
  •  4
  •   Michael Stum    18 年前

    我只能说.NET,但是如果您有一个ASP.NET Web服务,您应该能够直接向它添加枚举。

    然后在客户机应用程序中使用“添加Web引用”时,生成的类应包括该枚举

    但这是从我的头顶开始的,我很确定我过去做过,但我不能肯定。

        2
  •  6
  •   Peter Burns    18 年前

    为了可读性和调试,我建议不要在它们之间传递整数。假设你正在浏览你的日志,你会看到documenttype=4有500个错误。现在你得去查一下哪种文档类型是4。或者,如果其中一个应用程序引用了另一个应用程序中不存在的数字,可能是因为版本不匹配。

    这是一个有点多的代码,它将大脑的静态输入部分擦掉了一点原始信息,但是在HTTP之上的协议中,接收到的智慧是用清晰的字符串代替不透明的枚举。

        3
  •  6
  •   lubos hasko    18 年前

    我仍然会在内部使用枚举,但希望消费者只向我传递名称,而不是数值本身。

    只是一些愚蠢的例子来说明:

    public enum DocumentType
    {
      Invoice,
      Contract,
      WorkOrder,
      SignedWorkOrder
    }
    
    [WebMethod]
    public void UploadDocument(string type, byte[] data)
    {
      DocumentType docType = (DocumentType)Enum.Parse(typeof(DocumentType), type);
    }
    
        4
  •  3
  •   Darren Kopp    18 年前

    在.NET中,枚举值(默认情况下)用名称序列化为XML。对于可以有多个值的实例( flags ,然后在值之间放置一个空格。这是因为枚举不包含空格,所以可以通过拆分字符串(即使用lubos的示例“invoice contract signedworkorder”)再次获取值。

    可以使用 XmlEnumAttribute 或使用 EnumMember 使用wcf时的属性。

        5
  •  3
  •   Seibar    18 年前

    如果您正在使用.NET页/应用程序中的Web服务,则在向使用该服务的项目添加Web引用后,应该能够访问枚举。

        6
  •  3
  •   FlySwat    17 年前

    如果您不使用.NET到.NET SOAP,您仍然可以定义一个枚举器,前提是两个端点都使用WSDL。

    <s:simpleType name="MyEnum">    
         <s:restriction base="s:string">
              <s:enumeration value="Wow"/>
              <s:enumeration value="This"/>
              <s:enumeration value="Is"/>
              <s:enumeration value="Really"/>
              <s:enumeration value="Simple"/>
         </s:restriction>
    </s:simpleType>
    

    它取决于wsdl->代理生成器工具来将其解析为客户端语言中等效的枚举。

        7
  •  2
  •   Hank Gay    17 年前

    有相当好的理由不使用 enum 在这样的界面边界上。考虑 Dare's post 关于这个问题。

        8
  •  0
  •   Bermo    17 年前

    我注意到,当使用“添加服务引用”而不是来自vs.net的“添加Web引用”时,会遇到实际的枚举值以及枚举名称。这真的很烦人,因为我需要同时支持2.0和3.5客户机。我最终不得不进入2.0生成的Web服务代理代码,并在每次进行更改时手动添加枚举值!

    推荐文章