wcf - 如果通过 WCF 服务返回选项类型的最佳方式会怎样?

标签 wcf f#

我有一个 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建模数据结构,可以是nonesome

关于wcf - 如果通过 WCF 服务返回选项类型的最佳方式会怎样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28790446/

相关文章:

linq - F# groupBy - 系统异常 : unrecognized method call

c# - WCF - 接收对 http ://xxxxx/Service/的 HTTP 响应时出错

inheritance - 如何从WCF中未标记DataContractAttribute或SerializableAttribute的类继承?

wcf - WCF中端点行为的执行顺序是什么?

c# - 将单例模式与 Entity Framework 上下文一起使用 - 底层提供者在打开时失败

data-structures - 将 Haskell Edison API 和 Core 移植到 F# 有什么好处吗?

F# 如何返回具有元组或空值的值

f# - 如果在图表渲染完成之前调用 FSharpChart.SaveAs () 保存空白图像

c# - DLL 的入口点

csv - 来自 FSharp.Data 的 CSV typeprovider 的性能问题