2011-03-24 2 views
1

BlazeDS를 통해 ColdFusion 서버에 간단한 Flex AMF 호출을 시도합니다. RemoteObject를 사용하여 서버에 로그인 요청을 보내고 성공 또는 실패로 응답하려고합니다. 어떤 이유로 BlazeDS에 데이터가 도착하면 deserializaion 중에 메시지 본문이 삭제됩니다 (제 생각에). 여기 ColdFusion/BlazeDS 로그 코드와 CFC 및 Flex ActionScript 호출이 있습니다.AMF 본문이 비 직렬화에 놓임

모든 도움을 주시면 감사하겠습니다. 감사!

[BlazeDS]Channel endpoint my-cfamf received request. 
[BlazeDS]Deserializing AMF/HTTP request 
Version: 3 
    (Message #0 targetURI=null, responseURI=/3) 
    (Array #0) 
     [0] = (Typed Object #0 'flex.messaging.messages.RemotingMessage') 
     source = "service.UserService" 
     operation = "authenticateUser" 
     destination = "ColdFusion" 
     timestamp = 0 
     headers = (Object #1) 
      DSEndpoint = "my-cfamf" 
      DSId = "883A97CF-4A08-0B8E-9056-1BF562A40EB4" 
     body = (Array #2) 
      [0] = "Username" 
      [1] = "Password" 
     clientId = null 
     messageId = "D1743AB9-54B8-E73C-85C7-E990DE7F1ECE" 
     timeToLive = 0 

[BlazeDS]Before invoke service: remoting-service 
    incomingMessage: Flex Message (flex.messaging.messages.RemotingMessage) 
    operation = authenticateUser 
    clientId = 883AAF5D-900B-410A-1E8B-3B3FBD6552A6 
    destination = ColdFusion 
    messageId = D1743AB9-54B8-E73C-85C7-E990DE7F1ECE 
    timestamp = 1300998708880 
    timeToLive = 0 
    body = null 
    hdr(DSId) = 883A97CF-4A08-0B8E-9056-1BF562A40EB4 
    hdr(DSEndpoint) = my-cfamf 


-- Flex 
      remoteUserService = new RemoteObject; 
      remoteUserService.destination = "ColdFusion"; 
      remoteUserService.source = "service.UserService"; 
      remoteUserService.authenticateUser.addEventListener("result", authenticate_requestComplete); 
      remoteUserService.authenticateUser.addEventListener("fault", authenticate_requestFailure);  
      remoteUserService.authenticateUser({username:username, password:password}); 

-- ColdFusion 

    <cffunction name="authenticateUser" access="remote" returnType="Struct"> 
     <cfargument name="username" type="string"> 
     <cfargument name="password" type="string"> 


     <cfset ret = getAuthenticationService().authenticate(username, password) /> 

     <cfreturn ret> 
    </cffunction> 
+0

이 매개 변수가 배열로 바뀌고 있습니다. 그건 맞지 않아. 또한 값은 대문자입니다. Flex 측에서 전달하는 것입니까? Flex 측에서 "username"객체 란 무엇입니까? 그냥 문자열이야? –

+0

개체를 보내는 Flex 코드를 제공하십시오. –

+0

@James, 예, flex에서 전달되는 값은 두 개의 문자열입니다. 설정 한 테스트의 경우 각 필드에 대해 "Username"과 "Password"라는 테스트 문자열을 보냈습니다. RemoteObject 인수에서 사용자 이름과 비밀번호는 단지 문자열입니다. RemoteObject 호출을 통해 변수를 전달하도록 지시 받았기 때문에이를 객체에 넣었습니다. 말이 돼? 도와 주셔서 감사합니다! – mbseid

답변

1

왜 개체를 만드는 대신 두 개의 문자열로 자격 증명을 전달해야합니까? 그렇게하면 CF의 인수 범위에 표시됩니다. 또는 데이터 전송 객체에 패키징 할 수 있지만 과장된 것 같습니다.

+1

닉 (Nic)과 함께 일한 후 Flex와 통신하기 위해 ColdSpring Singleton을 사용하고 있음을 발견했다. 각 HTTP 요청이 CFC의 새로운 인스턴스를 생성 할 때 가능하지는 않다. 이 허용하지 않습니다 및 AMF 실패 이유입니다. 이제 서비스에 요청을 전달하는 remoteProxy 및 모든 훌륭한 작동합니다. 감사! – mbseid