分享

DelphiXE7中创建WebService(服务端+客户端)

 容心居 2021-02-22

相关资料:

http://www./news/Html/?1507.html

http://www./forum.php?mod=viewthread&tid=922

DelphiXE7新建WebService具体操作
1.打开“DelphiXE7”->“File”->“New”->“Other”
2.“New Items”->“Delphi Projects”->“WebSrvice”->“SOAP Server Application”
3.“Stand-alone application”->“Next”
4.“VCL application”->“Next”
5.“8080”->“Finish”
6.“Create Interface for SOAPmodule?”->“Yes”
7.“Add New WebService”->输入服务名字“MyData”->“OK”
8.保存全部工程文件
9.在“WebModuleUnit1”单元中放入控件:
FDConnection1
FDPhysMSSQLDriverLink1
FDQuery1
DataSetProvider1
ClientDataSet1
10.双击FDConnection1->Definition->Driver ID:->“MSAcc”->Daabase->“E:\MyData.mdb”->LoginPrompt:=False->Connected:=True
11.FDQuery1->Connection:=FDConnection1->SQL:=“select * from usesr”->Active:=True
12.DataSetProvider1->DataSet:=FDQuery1
13.ClientDataSet1->ProvideName:=DataSetProvider1

服务端-实例代码:

 unit WebModuleUnit1;

 interface

 uses System.SysUtils, System.Classes, Web.HTTPApp, Soap.InvokeRegistry,

   Soap.WSDLIntf, System.TypInfo, Soap.WebServExp, Soap.WSDLBind, Xml.XMLSchema,

   Soap.WSDLPub, Soap.SOAPPasInv, Soap.SOAPHTTPPasInv, Soap.SOAPHTTPDisp,

   Soap.WebBrokerSOAP, FireDAC.Stan.Intf, FireDAC.Stan.Option,

   FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def,

   FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Phys.MSAcc,

   FireDAC.Phys.MSAccDef, FireDAC.Phys.MSSQLDef, FireDAC.Stan.Param,

   FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt, Datasnap.DBClient,

   Datasnap.Provider, Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client,

   FireDAC.Phys.ODBCBase, FireDAC.Phys.MSSQL;

 type

   TWebModule1 = class(TWebModule)
 HTTPSoapDispatcher1: THTTPSoapDispatcher;
 HTTPSoapPascalInvoker1: THTTPSoapPascalInvoker;
 WSDLHTMLPublish1: TWSDLHTMLPublish;
 FDConnection1: TFDConnection;
 FDPhysMSSQLDriverLink1: TFDPhysMSSQLDriverLink;
 FDQuery1: TFDQuery;
 DataSetProvider1: TDataSetProvider;
 ClientDataSet1: TClientDataSet;
 procedure WebModule1DefaultHandlerAction(Sender: TObject;
   Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);

   private
 { Private declarations }

   public

   function GetInfo: widestring;

   function SetSQL(ASQL: widestring): widestring;
 { Public declarations }

   end;

 var

   WebModuleClass: TComponentClass = TWebModule1;

 implementation

 {%CLASSGROUP 'Vcl.Controls.TControl'}

 {$R *.dfm}

 function TWebModule1.GetInfo: widestring;

 begin

   ClientDataSet1.Close;

   ClientDataSet1.Open;

   Result := ClientDataSet1.XMLData;

   ClientDataSet1.Close;

 end;

 function TWebModule1.SetSQL(ASQL: widestring): widestring;

 begin

   FDQuery1.Close;

   FDQuery1.SQL.Text := ASQL;

   try
 FDQuery1.ExecSQL;
 Result := '成功 ';

   except
 Result := '失败';

   end;

 end;

 procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;

   Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);

 begin

   WSDLHTMLPublish1.ServiceInfo(Sender, Request, Response, Handled);

 end;

 end.
 { Invokable interface IMyData }

 unit MyDataIntf;

 interface

 uses Soap.InvokeRegistry, System.Types, Soap.XSBuiltIns;

 type

   { Invokable interfaces must derive from IInvokable }

   IMyData = interface(IInvokable)

   ['{865DBF5C-8DE1-4D01-AE04-16D04A3F5EF0}']
 function GetInfo:widestring;stdcall;
 function SetSQL(ASQL: widestring): widestring;stdcall;
 { Methods of Invokable interface must not use the default }
 { calling convention; stdcall is recommended }

   end;

 implementation

 initialization

   { Invokable interfaces must be registered }

   InvRegistry.RegisterInterface(TypeInfo(IMyData));

 end.
 { Invokable implementation File for TMyData which implements IMyData }

 unit MyDataImpl;

 interface

 uses Soap.InvokeRegistry, System.Types, Soap.XSBuiltIns, MyDataIntf;

 type

   { TMyData }

   TMyData = class(TInvokableClass, IMyData)

   public
 function GetInfo:widestring;stdcall;
 function SetSQL(ASQL: widestring): widestring;stdcall;

   end;

 implementation

 uses WebModuleUnit1;

 { TMyData }

 function TMyData.GetInfo: widestring;

 var

   oDM: TWebModule1;

 begin

   oDM := TWebModule1.Create(nil);

   result := oDM.GetInfo;

   oDM.Free;

 end;

 function TMyData.SetSQL(ASQL: widestring): widestring;

 var

   oDM: TWebModule1;

 begin

   oDM := TWebModule1.Create(nil);

   result := oDM.SetSQL(ASQL);

   oDM.Free;

 end;

 initialization

 { Invokable classes must be registered }
InvRegistry.RegisterInvokableClass(TMyData);

 end.

DelphiXE7客户端具体操作:
1.打开“DelphiXE7”->“File”->“New”->“Other”
2.“New Items”->“Delphi Projects”->“WebSrvice”->“WSDL Importer”
3.“Import WSDL”->WSDL Source中输入“http://localhost:8080/wsdl/IMyData”->“Next”
4.“Automatic SOAP versioning.(Recommended)”->“Next”
5.默认选项->“Finish”
6.Delphi会自动生成IMyData文件->保存
7.放入控件
ClientDataSet1
DataSource1
DBGrid1
8.DataSource1->DataSet:=ClientDataSet1
9.DBGrid1->DataSource:=DataSource1

客户端-实例代码:

 unit Unit1;

 interface

 uses

   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,

   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.DBGrids, Data.DB,

   Datasnap.DBClient, Vcl.StdCtrls;

 type

   TForm1 = class(TForm)
 Button1: TButton;
 ClientDataSet1: TClientDataSet;
 DataSource1: TDataSource;
 DBGrid1: TDBGrid;
 Button2: TButton;
 Edit1: TEdit;
 procedure Button1Click(Sender: TObject);
 procedure Button2Click(Sender: TObject);

   private
 { Private declarations }

   public
 { Public declarations }

   end;

 var

   Form1: TForm1;

 implementation

 uses IMyData1;

 {$R *.dfm}

 procedure TForm1.Button1Click(Sender: TObject);

  var

   ows: IMyData;

   s: string;

 begin

   ows := GetIMyData(true,'http://localhost:8080/wsdl/IMyData',nil);   //参数中可以使用配置的url

   s := ows.GetInfo;

   if length(s) <>  then

   ClientDataSet1.xmldata := s;

 end;

 procedure TForm1.Button2Click(Sender: TObject);

  var

   ows:IMyData;

   s:string;

 begin

   ows := GetIMyData(true,'http://localhost:8080/wsdl/IMyData',nil);   //参数中可以使用配置的url

   s := ows.SetSQL('delete from usesr where yonghu=' + QuotedStr('ni2'));

   if length(s) <>  then

   Edit1.Text := s;

 end;

 end.
  1. 相关资料:http://www./news/Html/?1507.html DelphiXE7新建WebService具体操作:1.打开“DelphiXE7”->“File”-& ...

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多