如何通过打开文件来从服务器向客户端发送和接收数据来使用数据库?

时间:2018-02-16 13:53:01

标签: f# f#-data f#-3.0 websharper

我想从客户端 - 网络侧接收数据(简单地作为字符串)来更新数据库,但现在它对我来说有点锁定,所以首先使用使用的方法将数据写入驱动器中的文件System.IO.File.WriteAllText(@"my-file.txt")

我收到了这个错误

error FS9001: Method name not found in JavaScript compilation: (receive : System.Object -> unit)

你能告诉我我做错了什么并修好了吗?

2 个答案:

答案 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"]
...