如果通过WCF服务返回Option类型的最佳方法会怎样?

时间:2015-03-01 05:27:21

标签: wcf f#

我有一个WCF方法搜索数据库中的记录,如果记录存在则返回Some(object),如果不存在则返回None。

我认为我无法通过WCF调用返回Type option的方法(我得到例外)。

以这种方式在F#中设计WCF服务的最佳方法是什么?

例如,我可以返回空Type

Person
  {  
      Name = ""
      Age = 0
      // ....
  }

如果记录在DB中不存在,但我正在寻找最好的想法......

1 个答案:

答案 0 :(得分:4)

WCF服务就像RESTful服务一样,公开了一个可以被远程客户端访问的API。这些客户端甚至不需要用.NET编写,但可以是Java客户端,或者用我们所知道的完全不同的语言编写。

SOAP和REST的重点是启用这些互操作性方案,但这也意味着服务可能share schema and contract, but not class(或任何其他类型的服务)。

几年前,我写了一篇名为 At the Boundaries, Applications are Not Object-Oriented 的文章,但您可以阅读该文章,并将面向对象的替换为 Functional : 在边界,应用程序不起作用(编程)

即使你可能以某种方式序列化WCF中的选项类型,也建议你不要这样做,因为客户可能无法理解它的含义,或者能够处理任何序列化格式。有意义的方式。

最后,选项可以被视为约束集合,其约束条件是它可以包含0或1个元素。通过可互操作的服务返回数据时,无法对约束进行建模,但仍可以返回集合/数组。

这就是我有时会做的:返回一个没有元素或单个元素的数组。大多数客户都明白这一点。

在构建RESTful服务时,您可以选择在资源不存在时返回 404 (未找到),但我不确定使用SOAP执行此操作是否有好办法

但是,使用SOAP,您可以使用XSD定义数据结构,因此您可以使用xsd.choice建模可以是 none 某些数据结构的数据结构