我有一个 WCF 方法,它在数据库中搜索记录,如果记录存在则返回 Some(object),如果不存在则返回 None。
正如我所见,我无法调用通过 WCF 返回 Type option
的方法(出现异常)。
以这种方式在 F# 中设计 WCF 服务的最佳方式是什么?
例如,我可以返回空的Type
Person
{
Name = ""
Age = 0
// ....
}
如果数据库中不存在该记录,但我正在寻找最好的想法...
最佳答案
WCF 服务与 RESTful 服务一样,公开可供远程客户端访问的 API。据我们所知,这些客户端甚至不需要用 .NET 编写,而可以是 Java 客户端,或者用完全不同的语言编写。
SOAP 和 REST 的全部意义在于实现这些互操作性场景,但这也意味着服务可能 share schema and contract, but not class (或任何其他类型,就此而言)。
几年前,我写了一篇文章,名为 At the Boundaries, Applications are Not Object-Oriented ,但您可以阅读该文章,并将面向对象替换为功能性: 在边界处,应用程序不是功能性的(编程) em>.
即使您可以以某种方式序列化 WCF 中的选项类型,我们建议您不要这样做,因为客户端可能不理解它的含义,或者无法以任何方式处理该序列化格式。有意义的方式。
最后,选项可以被视为一个受约束的集合,其约束条件是它可以容纳 0 个或 1 个元素。当您通过可互操作的服务返回数据时,您无法对该约束进行建模,但您仍然可以返回集合/数组。
这就是我有时所做的:返回一个没有元素或单个元素的数组。大多数客户都明白这一点。
构建 RESTful 服务时,您可以更好地选择在资源不存在时返回 404(未找到),但我不确定是否有使用 SOAP 实现此目的的好方法.
但是,通过 SOAP,您可以使用 XSD 定义数据结构,因此您可以使用 xsd.choice建模数据结构,可以是none或some。
关于wcf - 如果通过 WCF 服务返回选项类型的最佳方式会怎样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28790446/