红鱼儿

kbmMW 5.07.00试用笔记

kbmMW 5.06.20试用笔记 中遇到的问题,在这个版本中,基本都解决了。但还是发现修正后存在的小问题及新问题:

1.Resolve返回值错误

当提交的ClientQuery是执行一条sql语句,如Insert,当发生错误时,如主键重复,则Resolve无法返回正确的结果。具体情况就是在客户端显示异常信息。

    q1.Query.Text:='Insert into t1 (fid,fname)         values (''1000'',''aaaa'')';
    //q2.Query.Text:='Insert into t2 (fid,fcustomername) values (''1'',''aaaa'')';
    tx.StartTransaction;
    tx.TransactionResolver:=kbmMWClientTransactionResolver1;
    try
          ///q1.Execute(tx);
          //q2.Execute(tx);
          tx.AddDataset(q1);
          tx.AddDataset(q2);
          r:=tx.Resolve;//抛出异常,返回结果不对
....

后记:5.08依旧存在这个问题

2.SameFile

比较文件是否相同,第一次运行正常,如果继续执行一次,则结果错误。跟踪了一下,发现还是存在5.06.20中的问题,WaitRun不等待线程执行完,直接跳到下一句代码。

procedure Tmainform.Button5Click(Sender: TObject);
begin
  if kbmMWFileClient1.SameFile('.\1.png','1.png') then
    ShowMessage('File is same.')//显示这句,比较结果是对的
  else
    ShowMessage('File not same.');

  if kbmMWFileClient1.SameFile('.\1.png','1.png') then
    ShowMessage('File is same.')
  else
    ShowMessage('File not same.');//执行这句,比较结果是错的

end;

后记:5.08.10解决!

3.kbmMWTCPServerTransport

kbmMW 5.07.00基于ScrossSocket,实现新的Transport,网友遇到从kbmMWTCPIPIndyServerTransport换成kbmMWTCPServerTransport后,遇到问题。我测试过程如下:

procedure Tmainform.Button6Click(Sender: TObject);
var
  i:integer;
begin
  // 删除所有记录
  kbmMWClientQuery1.Close;
  kbmMWClientQuery1.Open;
  kbmMWClientQuery1.DeleteRecords;
  kbmMWClientQuery1.Resolve;

  for i := 1 to 10000 do
  begin
     Label3.Caption:=i.ToString;
     application.ProcessMessages;
     kbmMWClientQuery1.AppendRecord([i, i.ToString]);
  end;

  kbmMWClientQuery1.Resolve;

end;

服务端利用TCPServerTransport时,一次性提交1000条记录成功,变成10000条记录失败;换成TcpipIndyServerTransport,提交10000条记录成功。

这与xalion所说相符,他说在封装CrossSocket时遇到:就是数据包不能太大

5.08解决

4.rest上传文件服务

测试xalion做的rest服务器,发现无法上传文件,还是xalion威武,在TkbmMWHTTPMimeHeaderValue.GetDelimiter方法中,增加一行搞定:

function TkbmMWHTTPMimeHeaderValue.GetDelimiter(const AName:string):char;
begin
     if (AName=KBMMW_HTTP_REQUEST_HEADER_AcceptDatetime) or
        (AName=KBMMW_HTTP_REQUEST_HEADER_Date) or
        (AName=KBMMW_HTTP_REQUEST_HEADER_Expires) or
        (AName=KBMMW_HTTP_REQUEST_HEADER_Cookie) or
        (AName=KBMMW_HTTP_REQUEST_HEADER_IfModifiedSince) or
        (AName=KBMMW_HTTP_REQUEST_HEADER_IfUnmodifiedSince) or
        (AName=KBMMW_HTTP_REQUEST_HEADER_IfRange) or
        (AName=KBMMW_HTTP_REQUEST_HEADER_TE) or
        (AName=KBMMW_HTTP_RESPONSE_HEADER_SetCookie) or
        (AName=KBMMW_HTTP_RESPONSE_HEADER_Date) or
        (AName=KBMMW_HTTP_RESPONSE_HEADER_Expires) or
        (AName=KBMMW_HTTP_RESPONSE_HEADER_RetryAfter) or
        (AName=KBMMW_HTTP_RESPONSE_HEADER_LastModified) or
        (AName=KBMMW_HTTP_RESPONSE_HEADER_ContentType) or
        (AName=KBMMW_HTTP_RESPONSE_HEADER_ContentDisposition)//增加这行
     then
        Result:=';'
     else
         Result:=',';
end;

后记:5.12解决,具体在哪一个版本中未知。

5.TkbmMWProcess.CreateProcess调用一个外部EXE出地址错 误:

procedure Tmainform.Button1Click(Sender: TObject);
begin

     //ShellExecute(0, 'open', PWideChar(String('SyncLocalDateTime.exe')),'',nil,SW_SHOWNORMAL); //uses Winapi.ShellAPI
     TkbmMWProcess.CreateProcess('.\SyncLocalDateTime.exe','');

end;

利用ShellExecute调用没有问题,换成CreateProcess则产生地址错 误,已经发给作者。

作者回复很快,确认并在即将发布的版本中修正。另外我进一步测试,调用windows的CMD也是同样的错误。

5.08解决

procedure Tmainform.Button1Click(Sender: TObject);
begin

//     TkbmMWProcess.CreateProcess('.\Test.exe','');

     TkbmMWProcess.CreateProcess('c:\windows\system32\cmd.exe','');
end;

 6.kbmMWTCPServerTransport

这是作者新加的基于ScrossSocket修改的Transport,要启用他,需要在inc文件中增加

{$DEFINE  KBMMW_NATIVETRANSPORT_SUPPORT}
5.12依旧需要手工填加。

posted on 2018-12-11 18:49  红鱼儿  阅读(707)  评论(1编辑  收藏  举报