Bootstrap

delphi xe 文件服务器,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.相关资料:http://www.2ccc.com/news/Html/?1507.html DelphiXE7新建WebService具体操作:1.打开“DelphiXE7”->“File”-& ...

;