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

基本上,我的困境是如何分享两个应用程序之间的枚举。

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

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

由于您需要在两个应用程序中对这些值进行硬编码,因此我认为这是O.K.使用描述性字符串(发票合同WorkOrderSignedWorkOrder )。

在第一个应用程序中创建一个 DocumentTypes 枚举并在第二个应用程序中重现它,然后将相应的整数值传递给它们之间的Web服务可能是更好的方法吗?

0
额外 编辑
意见: 2

8 答案

我只能讲.net,但如果你有一个ASP.net Web服务,你应该可以直接给它添加一个枚举。

当您在客户端应用程序中使用“添加Web引用”时,生成的类应包含该枚举

但这是我头顶的事情,我很确定我过去做过这件事,但我无法确定。

0
额外
@Dave Web Services封装了方法,因此如果没有使用Enum的方法,从Web Service的角度来看,没有必要引用它。我建议用一个单独的问题来描述你想要做什么/为什么你想要一个未引用的枚举。
额外 作者 Michael Stum,
'添加Web引用'确实创建枚举,但只包含那些在某些方法中引用的枚举。我可以手动将枚举添加到自动生成的Reference.cs文件,并且一切正常。也许这是单独的问题,但有什么办法可以让'添加Web引用'添加引用程序集中的所有枚举(但未在代码中使用),而无需手动黑客入侵Reference.cs文件?
额外 作者 Dave M,

在.NET中,枚举值是(默认情况下)用名称序列化到xml中。对于可以有多个值的情况(标志),那么它会在这些值之间留出一个空格。这是有效的,因为枚举不包含空格,所以你可以通过分割字符串来重新获得值(即“使用lubos的例子”Invoice Contract SignedWorkOrder“)。

您可以使用 XmlEnumAttribute ,或者使用使用WCF时> EnumMember 属性。

0
额外

如果您正在使用.NET页面/应用程序使用Web服务,那么在将Web引用添加到使用该服务的项目后,应该可以访问该枚举。

0
额外

也有一些相当充分的理由不使用这样的接口边界上<�代码>枚举</代码>秒。考虑敢为天下先的帖子关于这个问题的。

0
额外

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

0
额外

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

    
     
          
          
          
          
          
     

Its up to the WSDL -> Proxy generator tool to parse that into a enum equivalent in the client language.

0
额外

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

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

public enum DocumentType
{
  Invoice,
  Contract,
  WorkOrder,
  SignedWorkOrder
}

[WebMethod]
public void UploadDocument(string type, byte[] data)
{
  DocumentType docType = (DocumentType)Enum.Parse(typeof(DocumentType), type);
}
0
额外

我建议不要在它们之间传递一个整数,只是为了可读性和调试的目的。假设你正在浏览你的日志,并且你发现DocumentType = 4有500个错误。现在,您必须查找哪个DocumentType为4.或者如果其中一个应用程序引用另一个中不存在的数字,可能是由于版本不匹配。

这是一个更多的代码,它将大脑的静态打字部分磨蹭得有点​​粗糙,但在HTTP之上的协议中,接收到的智慧是在不透明的枚举上使用清晰的字符串。

0
额外