Websharper无法反序列化联合类型

时间:2011-07-30 17:38:54

标签: f# websharper

我有以下客户端代码:

|>! OnClick (fun _ _ -> Server.CreateBug input.Value |> Server.SendCommand)

这是类型和服务器代码:

type Command =
    | CreateBug of string
    | Query of Query * AsyncReplyChannel<string>

[<Rpc>]
let SendCommand cmd =
    dispatcher.Post cmd

客户端可以将其序列化为:[{“$”:0,“$ 0”:“test”}]

但是在调试时我得到以下日志错误:

  

WebSharper.Web错误:0:无法执行远程调用。无法获取JSON反序列化器:ClientReferral.Server + Command []

     

WebSharper错误:0:无法执行远程调用。无法获取JSON反序列化器:ClientReferral.Server + Command []

这段代码相当简单,似乎没有任何迹象表明它在WebSharper手册中不起作用。我甚至记得那样使用它,所以我不知道出了什么问题。

编辑: 这是Query的定义:

type Query =
    | GetBugs
    | GetBugInfo of int

1 个答案:

答案 0 :(得分:2)

错误是在运行时而不是在编译时发生的事实肯定是一个错误,我将尝试在周一重现并修复。

从技术上讲,由于AsyncReplyChannel&lt;'T&gt;没有默认构造函数WebSharper无法为它构造反序列化器。

从更高的层面来看,我无法理解你的意图。为什么要在RPC上发送函数同构类型?

此外,这:

|>! OnClick (fun _ _ -> Server.CreateBug input.Value |> Server.SendCommand)

这看起来像是试图在服务器上构造一个对象,然后无偿地将它发送到客户端并返回,然后用它做一些事情 - 这是对的吗?我假设Server。*函数在服务器上执行。如果是这样,它必须重构为一次调用:

|>! OnClick (fun _ _ -> Server.SendBugCommand input.Value)

[<Rpc>]
let SendBugCommand x =
    CreateBug x
    |> SendCommand