我想从客户端 - 网络侧接收数据(简单地作为字符串)来更新数据库,但现在它对我来说有点锁定,所以首先使用使用的方法将数据写入驱动器中的文件System.IO.File.WriteAllText(@"my-file.txt")
我收到了这个错误
error FS9001: Method name not found in JavaScript compilation: (receive : System.Object -> unit)
你能告诉我我做错了什么并修好了吗?
答案 0 :(得分:2)
WebSharper的客户端可以调用本身位于[<JavaScript>]
范围内或标记为[<Remote>]
的方法进行远程调用。错误消息没有提到第二个选项,但这就是你需要的(与示例函数DoSomething
相同)。
您还需要使远程功能不通过obj
而是string
发送。远程函数参数根据类型信息进行反序列化,不能为obj
。例如,在客户端代码中,使用Server.receive rvInput.Value
。 (rvInput
是一个反应变量,.Value
包含当前值)
请注意,如果要将值返回给服务器,则远程函数必须为async
。这里,仅用于日志记录,返回unit
也可以,但是您无法在服务器上确定日志记录是否成功。通过返回async<unit>
,如果要防止连接或服务器错误,可以捕获客户端代码中的错误。同样,模板中的示例代码提供了一些指导。
答案 1 :(得分:2)
(来自http://forums.websharper.com/topic/84579的交叉发布)
这是您的服务器端功能应该是什么样的:
[<Remote>]
let Receive (input: string) =
async {
System.IO.File.WriteAllText(@"D:/myDatabase.txt", "Server received data: " + input)
}
要从Client.fs
拨打电话,您需要:
...
button [
on.click (fun _ _ ->
async {
do! Server.Receive rvInput.Value
} |> Async.Start
)
] [text "Receive"]
...