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

相关资料:

http://www.2ccc.com/news/Html/?1507.html

http://www.dfwlt.com/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.2ccc.com/news/Html/?1507.html DelphiXE7新建WebService具体操作:1.打开“DelphiXE7”->“File”-& ...

(0)

相关推荐