자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다. 
  • 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)

Delphi 데이터스냅 콜백 오류 문의

2016.10.14 11:10

회원 조회 수:366

본 게시판 사용시 당부 사항
* 이 게시판은 자유롭게 질문을 올리고 자발적으로 답변을 공유하는 게시판입니다.
* 어느 누구도 답변을 달아야만 하는 책임은 없습니다.
* 따라서 질문을 올리실 때에는 최대한 자세하고 정중하게 질문을 올려 주세요.
* 최대한 질문을 자세히 올려야 답변도 자세히 올라 옵니다.
* 본 질문에 답변을 주시는 여러 개발자님들께 미리 감사드립니다.
-----------------------------------------------------------------------------------------------

현재 베를린 10.1 update 1 버전을 사용중입니다.

엠바코데로 홈페이지에서 데이터스냅 콜백 관련 예제를 다운로드 받아 테스트 중 오류가 있어 문의 드립니다.

샘플코드를 다운받아 컴파일 후 다 정상 작동하는데 NotifyCallback 메서드를 이용해서 클라이언트간에 콜백함수를

호출할경우 오류가 발생합니다. 동영상을 보면 분명 정상 작동하는데 안되네요. 베를린 10.1 버전에서 버그로 인한건지

아니면 다른 설정이 있는건지 알고 싶습니다.

테스트한 예제 소스를 같이 첨부합니다.

 

다운받은 샘플 url: http://edn.embarcadero.com/article/41374

오류 메시지 : 'Remote error: VAR and OUT arguments must match parameter type exactly'

 


procedure TFormClient.ButtonNotifyClick(Sender: TObject);
var AClient: TDSAdminClient; aResponse: TJSONValue;
begin
  AClient := TDSAdminClient.Create(SQLConnection1.DBXConnection);
  try
    AClient.NotifyCallback(
      DSClientCallbackChannelManager1.ChannelName,
      EditDestinationClientId.Text,
      EditDestinationCallbackId.Text,
      TJSONString.Create(EditMsg.Text),
      aResponse
    );
  finally
    AClient.Free;
  end;
end;

 

28288_delphi_labs_datasnap_xe_xe3_callbacks (1).ZIP

 

참고로 테스트한 소스코드 입니다. NotifyCallback 호출시 오류가 발생합니다.

 

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
unit FormClientUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DBXDataSnap, DBXCommon, DB, SqlExpr, DBXJSON, StdCtrls,
  DSHTTPCommon, DSService, DSProxy;

type
  TMyCallback = class(TDBXCallback)
  public
    function Execute(const Arg: TJSONValue): TJSONValue; override;
  end;

  TFormClient = class(TForm)
    SQLConnection1: TSQLConnection;
    MemoLog: TMemo;
    DSClientCallbackChannelManager1: TDSClientCallbackChannelManager;
    ButtonBroadcast: TButton;
    EditMsg: TEdit;
    Label2: TLabel;
    ButtonNotify: TButton;
    Label1: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    EditLocalClientId: TEdit;
    EditLocalCallbackId: TEdit;
    EditDestinationCallbackId: TEdit;
    EditDestinationClientId: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure ButtonBroadcastClick(Sender: TObject);
    procedure ButtonNotifyClick(Sender: TObject);
  private
    FMyCallbackName: string;
  public
    procedure LogMsg(const s: string);
    procedure QueueLogMsg(const s: string);
  end;

var
  FormClient: TFormClient;

implementation

{$R *.dfm}

{ TMyCallback }

function TMyCallback.Execute(const Arg: TJSONValue): TJSONValue;
begin
  FormClient.QueueLogMsg(Arg.ToString);
  Result := TJSONTrue.Create;
end;

{ TFormClient }

procedure TFormClient.ButtonBroadcastClick(Sender: TObject);
var AClient: TDSAdminClient;
begin
  AClient := TDSAdminClient.Create(SQLConnection1.DBXConnection);
  try
    AClient.BroadcastToChannel(
      DSClientCallbackChannelManager1.ChannelName,
      TJSONString.Create(EditMsg.Text)
    );
  finally
    AClient.Free;
  end;
end;

procedure TFormClient.ButtonNotifyClick(Sender: TObject);
var AClient: TDSAdminClient; aResponse: TJSONValue;
begin
  AClient := TDSAdminClient.Create(SQLConnection1.DBXConnection);
  try
    AClient.NotifyCallback(
      DSClientCallbackChannelManager1.ChannelName,
      EditDestinationClientId.Text,
      EditDestinationCallbackId.Text,
      TJSONString.Create(EditMsg.Text),
      aResponse
    );
  finally
    AClient.Free;
  end;
end;

procedure TFormClient.FormCreate(Sender: TObject);
begin
  FMyCallbackName := TDSTunnelSession.GenerateSessionId;
  DSClientCallbackChannelManager1.ManagerId := TDSTunnelSession.GenerateSessionId;
  DSClientCallbackChannelManager1.RegisterCallback(
    FMyCallbackName,
    TMyCallback.Create
  );

  EditLocalClientId.Text := DSClientCallbackChannelManager1.ManagerId;
  EditLocalCallbackId.Text := FMyCallbackName;
  EditDestinationClientId.Text := '';
  EditDestinationCallbackId.Text := '';
end;

procedure TFormClient.LogMsg(const s: string);
begin
  MemoLog.Lines.Add(DateTimeToStr(Now) + ': ' + s);
end;

procedure TFormClient.QueueLogMsg(const s: string);
begin
  TThread.Queue(nil,
    procedure
    begin
      LogMsg(s)
    end
  );
end;

end.
번호 제목 글쓴이 날짜 조회 수
공지 [프로그래밍 강의] 2021.6~2021.12 관리자 2015.01.22 17220
공지 유용한 관련 사이트 관리자2 2014.03.20 56090
공지 본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다. 관리자 2012.01.10 99532
1093 upnp 관련 질문입니다.-(질문 수정-화면캡쳐 포함) [2] file 쿠핑 2016.09.29 420
1092 bluetoothLE 통신 [1] 파랑 2016.09.29 348
1091 [델파이 부트캠프] 윈도우모바일 10 앱 제작도 가능한가요? 험프리 2016.09.30 281
1090 [델파이 부트캠프] 앱 개발에 관심이 많아 개발 방법이 궁금합니다. 험프리 2016.09.30 195
1089 [델파이 부트캠프] 델파이가 어떻게 바뀌고 있는지 궁금하네요. 험프리 2016.09.30 114
1088 [델파이 부트캠프] 하위버전에서 신버전으로 올렸을때 에러가 나면 다시만들어야 하나요? 험프리 2016.09.30 291
1087 FireDac에서 조회건수(RecordCount) 에 대한 재질문 입니다 [1] jcijang 2016.09.30 999
1086 베를린 10.1, Windows 10 환경에서 Bluetooth LE 스캔 시 장비가 검색되지 않습니다 [1] 지병철 2016.09.30 255
1085 sqlite 사용시 오류 [1] file fireman 2016.10.04 228
1084 apk 파일 생성시 오류 [1] file 민수사랑 2016.10.04 591
1083 DBLookupCombobox 디스플레이 하는 방법 [2] 델펀맨 2016.10.12 810
1082 ArcGIS - Delphi Component 문의 연일하 2016.10.13 107
1081 베를린에서 엑셀 사용 에러 [1] file 가이오 2016.10.14 269
» 데이터스냅 콜백 오류 문의 [3] file 회원 2016.10.14 366
1079 개발환경 지원 문의드립니다~~ [1] 지지배배 2016.10.17 132
1078 보고서툴은 Fast Report 밖에 없나요 ? [1] 준이킴 2016.10.19 346
1077 델파이 오픈 아이콘 버튼을 누르면 델파이가 종료되는 현상 file 화이부동 2016.10.19 185
1076 firedac 한글 깨짐 문의 mecagoki 2016.10.21 403
1075 IOS 개발중 오류....확인부탁드립니다. [1] 박정희 2016.10.24 345
1074 안드로이드, Win CE관련 질문 드립니다. [1] 공감 2016.10.24 313