2011-07-30 3 views
1

을 역 직렬화 할 수없는 나는 다음과 같은 클라이언트 코드가 : 클라이언트가이 직렬화 할 수Websharper 노조 유형

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

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

: [{ "$"여기

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

이 유형 및 서버 코드의 : 0, "$ 0": "테스트"}]

그러나 나는 다음과 같은 로그 오류 디버깅을 얻을 :

WebSharper.Web Error: 0 : Failed to execute a remote call. Failed to get JSON deserializer for: ClientReferral.Server+Command[]

WebSharper Error: 0 : Failed to execute a remote call. Failed to get JSON deserializer for: ClientReferral.Server+Command[]

이 코드는 다소 사소한 것으로 WebSharper 설명서에서 작동하지 않는다는 것을 나타내는 것은 아닙니다. 나는 그것을 그렇게 사용하는 것을 기억한다. 그래서 나는 틀린 것을 모른다.

편집

:

type Query = 
    | GetBugs 
    | GetBugInfo of int 
+0

'Query of Query'는 'Query of Command'입니까? – ildjarn

+0

기본적으로 서버에 명령 또는 쿼리를 보내려합니다. 쿼리는 일반적으로 ReplyChannel을 사용하여 명령에 래핑되어 에이전트에 전달됩니다. –

답변

2

오류가 런타임시가 아닌 컴파일시에 무슨 일이 일어나고 있다는 사실은, 확실히 버그 내가 월요일에 재현하고 해결하기 위해 노력할 것입니다 : 이 쿼리의 정의입니다.

기술적으로 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 
+0

AsyncReplyChannel을 제거해도 문제가 해결되었습니다. –

+0

나는 의도가 잘못된 것이라고 알고 있습니다. Server.CreateBug는 서버 측 함수가 아니라 Server.Command.CreateBug 공용체 유형입니다. 또한 추가 왕복이 없으므로 클라이언트 측에서 공사가 완료되었음을 확인했습니다. 내 의도는 클라이언트가 히스토리를 보존하고 관련 코드를 실행하기 위해 일련 화하는 서버에 다양한 유형의 명령을 보낼 수있게하려는 것입니다. '왜 함수를 전송해야합니까?'- isomorphic을 송신하는 이유에 대한 설명을 이해하지 못합니다. 여러 가지 명령을 한 진입 점으로 보내는 것보다 서버 측 메소드를 직접 호출하는 것이 더 나은 방법입니까? –

+1

명령이 정상적으로 작동합니다. 재미는 폐쇄가 보내질 때 시작됩니다. 저를 혼란스럽게 만들면 AsyncReplyChannel에서 클로저를 래핑 할 수 있다는 것입니다. WebSharper는 현재 어느 방향 으로든 RPC를 통해 클로저를 전송하는 것을 허용하지 않지만이를 수행하는 시스템에서는 여전히 그 의미와 구현이 무엇인지 명확하지 않습니다. 어쨌든, 행운을 비네! – t0yv0