WebService 类型混淆

WebService type confusion

我正在使用 this template 创建网络服务。

这是我正在使用的 Web 服务合同:

[<ServiceContract>]
type ISimpleService =
    [<OperationContract>]
    abstract GetItems: value:int -> Item[]
    [<OperationContract>]
    abstract InsertItem: composite:Item -> int
  1. 在哪里可以找到 valuecomposite 的描述?是语言功能还是其他?
  2. 我想要 GetItem 方法没有任何输入参数并且 InsertItem 没有 return 值(无效)。可能吗?

代码示例中的valuecomposite符号只是参数的名称。这几乎对应于以下 C# 接口:

[ServiceContract]
interface ISimpleService {
  [OperationContract]
  Item[] GetItems(int value);
  [OperationContract]
  int InsertItem(Item composite);
}

如果你想改变定义使得InsertItem不return任何东西并且GetItem不接受任何东西,你需要改变他们的return并输入类型为 unit:

[<ServiceContract>]
type ISimpleService =
    [<OperationContract>]
    abstract GetItems: unit -> Item[]
    [<OperationContract>]
    abstract InsertItem: composite:Item -> unit

unit 类型(大致)对应于 C# 中的 void 当用作 return 类型时,这也是它的编译方式。当用作输入时,unit 对应于一个空参数列表(并且它是这样编译的)。

这听起来可能会令人困惑,但是 unit 类型是一种 F# 类型,只有一个值写为 (),所以当您调用 foo() 时,您实际上是在传递该值unit 类型作为参数。这需要一些时间来适应,但它使语言变得优雅简单。