Websharper не может десериализовать тип объединения - PullRequest
1 голос
/ 30 июля 2011

У меня есть следующий код клиента:

|>! 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. Я даже помню, как использовал это, поэтому я не знаю, что случилось.

Edit: Это определение запроса:

type Query =
    | GetBugs
    | GetBugInfo of int

1 Ответ

2 голосов
/ 30 июля 2011

тот факт, что ошибка происходит во время выполнения, а не во время компиляции, определенно является ошибкой, я попытаюсь воспроизвести и исправить в понедельник.

Технически, поскольку AsyncReplyChannel <'T> не имеетконструктор по умолчанию WebSharper не может создать десериализатор для него.

Глядя на более высокий уровень, я не могу понять ваше намерение.Зачем отправлять функционально-изоморфный тип через RPC?

Более того, это:

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

Это выглядит для меня как попытка создать объект на сервере, а затем безвозмездно отправить егоклиент и обратно, а потом что-то с ним делать - это правильно?Я предполагаю, что функции Server. * Выполняются на сервере.Если это так, он должен быть реорганизован для одного вызова:

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

[<Rpc>]
let SendBugCommand x =
    CreateBug x
    |> SendCommand
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...