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

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

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

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

由于您需要在两个应用程序中对这些值进行硬编码,因此我认为这没问题。使用描述性字符串(InvoiceContractWorkOrderSignedWorkOrder)。

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

请先 登录 后评论

5 个回答

lubos hasko

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

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

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

[WebMethod]
public void UploadDocument(string type, byte[] data)
{
  DocumentType docType = (DocumentType)Enum.Parse(typeof(DocumentType), type);
}
请先 登录 后评论
Bermo

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

请先 登录 后评论
Michael Stum

我只能说 .net,但如果您有 ASP.net Web 服务,您应该可以直接向其添加枚举。

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

但这是我的想法,我很确定我过去做过,但我不能肯定。

请先 登录 后评论
Peter Burns

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

这是一个多一点的代码,它让大脑的静态类型部分有点粗糙,但在 HTTP 之上的协议中,公认的智慧是在不透明的枚举上支持清晰的字符串。

请先 登录 后评论
Seibar

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

请先 登录 后评论