자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다. 
  • 제품설치/등록 오류 문의: 설치/등록 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 17166
공지 유용한 관련 사이트 관리자2 2014.03.20 56036
공지 본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다. 관리자 2012.01.10 99470
973 xe7 폼 사이즈 나 폼위치를 자유자래로 지정할수 없나요? [2] file 라빌레나 2017.03.19 311
972 vcl160.bpl access violation [1] 도의 2017.03.20 1324
971 MainMenu의 글자크기를 크게할 수 있나요? file 험프리 2017.03.23 840
970 윈도우함수 관련 문의드립니다. [2] 이룸넷류 2017.03.24 301
969 DATASNAP - CALLBACK 관련 문의 드립니다. [2] 담더기 2017.03.25 239
968 Indy Compressor 에 버그가 있는것 같습니다. [1] 우정 2017.03.26 457
967 실행되지만 레퍼런스에 없는 system.default [1] 임병기 2017.03.26 90
966 Rest 클라이언트 Post방법 질문합니다. [2] 루피 2017.03.29 123
965 델파이 10.1 - 안드로이드 서비스 개발시 'activity not found, maybe you are in a service' 에러 [3] 봄이아빠 2017.03.30 365
964 Windows CE [1] 가필드 2017.03.31 190
963 실행되지만 레퍼런스에 없는 system.default 2 임병기 2017.04.01 81
962 10.2 도쿄에서 IBX(TIBQuery, TIBTable 등) 컴포넌트가 보이지 않습니다. file 험프리 2017.04.03 441
961 Rest 클라이언트 Post 방법 재질문 합니다. [5] 루피 2017.04.04 678
960 INDY9 -> INDY10으로 변경 시 오류 file ki 2017.04.04 285
959 델파이 컴파일 옵션 관련 문의 드립니다 [2] 손보라 2017.04.05 889
958 [10.2 도쿄 출시세미나] 네이티브 HTTPS 사용 시 OpenSSL 라이브러리(libeay32, ssleay32)를 같이 배포해야 하나요? 험프리 2017.04.06 199
957 [10.2 도쿄 출시세미나] 리눅스 플랫폼에서, http클라이언트는 indy기반인가요? 험프리 2017.04.06 140
956 [10.2 도쿄 출시세미나] ClassGroup은 10.2부터 추가된 건가요? 그리고, 멀티플랫폼 개발에서 unit작성할때마다 필수로 추가해야 하나요? 험프리 2017.04.06 133
955 [10.2 도쿄 출시세미나] 리눅스 웹서비스 제작시 아파치 모듈 말고 httpd 서버(nginx 등)도 적용 가능한가요? 험프리 2017.04.06 115
954 [10.2 도쿄 출시세미나] 델파이 리눅스앱은 기본 공유(동적)라이브러리 방식으로 빌드되나요? 험프리 2017.04.06 97