Как использовать базу данных, открыв Файл для отправки и получения данных с сервера на клиент?

Я хочу получать данные (просто в виде строки) со стороны веб-клиента для обновления базы данных, но сейчас это немного блокирует меня, поэтому сначала запишите данные в файл на диске с помощью System.IO.File.WriteAllText(@"my-file.txt")


Я получил эту ошибку

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

Можете ли вы сказать мне, где я сделал неправильно и исправить это?


2 ответа

Клиентская сторона WebSharper может вызывать методы, которые сами находятся в [<JavaScript>] сфера или помечены [<Remote>] для удаленных звонков. Сообщение об ошибке не упоминает второй вариант, но это то, что вам нужно здесь (так же, как пример функции DoSomething тоже есть).

Вам также нужно будет сделать удаленную функцию, чтобы не отправлять через obj но string, Аргументы удаленной функции десериализуются на основе информации о типе и не могут быть obj, Например, в коде клиента используйте Server.receive rvInput.Value, (rvInput реактивная переменная, для которой .Value содержит текущее значение)

Обратите внимание, что если вы хотите вернуть значение на сервер, удаленная функция должна быть async, Здесь только для входа, возврата unit тоже работает, но у вас нет возможности на сервере определить, была ли запись успешной. Возвращая async<unit>вы можете отлавливать ошибки в коде клиента, если вы хотите защититься от ошибок соединения или сервера. Опять же, пример кода в шаблоне дает некоторые рекомендации.

(Перекрестная публикация с 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"]
...
Другие вопросы по тегам