c#

位置:IT落伍者 >> c# >> 浏览文章

Delphi调用WebServices(C#)代码


发布日期:2019年01月11日
 
Delphi调用WebServices(C#)代码

using System;

using SystemWeb;

using SystemWebServices;

using SystemWebServicesProtocols;

using SystemData;

using SystemDataOracleClient;

using SystemIO;

using SystemIOCompression;

using SystemRuntimeSerializationFormattersBinary;

[WebServiceBinding(ConformsTo = WsiProfilesBasicProfile_)]

public class Service : SystemWebServicesWebService

{

private OracleConnection webConnection;

DataTable curDt = new DataTable();

DataSet curSet = new DataSet();

OracleDataAdapter curDa = new OracleDataAdapter();

OracleCommand curComm = new OracleCommand();

private string GetCurCnnStr()

{

//连接数据库并打开

OracleConnectionStringBuilder cnnStrBuilder = new OracleConnectionStringBuilder();

cnnStrBuilderUserID = ;

cnnStrBuilderPassword = ;

cnnStrBuilderDataSource = ;

return cnnStrBuilderConnectionString;

}

public Service()

{

//如果使用设计的组件请取消注释以下行

//InitializeComponent();

}

[WebMethod(Description = 判断空值)]

private OracleParameter CreateParam(string ParamName object ParamValue)

{

OracleParameter Result = new OracleParameter();

ResultParameterName = ParamName;

if (ParamValue != null)

{

ResultValue = ParamValue;

}

else

{

ResultValue = DBNullValue;

}

return Result;

}

[WebMethod(Description = 测试连接)]

public string Linking()

{

return WebService连接成功!;

}

[WebMethod(Description = 查询信息)]

public byte[] Search(string img)

{

try

{

webConnection = new OracleConnection(GetCurCnnStr());

webConnectionOpen();

//查询表中的所有的数据

OracleDataAdapter webAdapter = new OracleDataAdapter(select pic from pic where id= + img webConnection);

DataSet webDataTable = new DataSet();

//byte[] webDataTable = new byte[];

webAdapterFill(webDataTable);

webConnectionClose();

//序列化为二进制

webDataTableRemotingFormat = SerializationFormatBinary;//确定序列化格式

BinaryFormatter bFormatter = new BinaryFormatter();

MemoryStream mStream = new MemoryStream();

bFormatterSerialize(mStream webDataTable);

byte[] bytes = mStreamToArray();//将数据流写入字节数组

//返回数组

return bytes;

}

catch (Exception)

{

curCommTransactionRollback();

return null;

}

finally

{

webConnectionClose();

}

}

[WebMethod(Description = 添加信息)]

public void Add(string id byte[] Image)

{

try

{

webConnection = new OracleConnection(GetCurCnnStr());

curCommConnection = webConnection;

webConnectionOpen();

curCommTransaction = webConnectionBeginTransaction();

curCommCommandText = insert into pic(idpic)values(:pId:pPic);

curCommParametersAdd(CreateParam(pId (id != null) ? id : null));

curCommParametersAdd(CreateParam(pPic (Image != null) ? Image : null));

curCommExecuteNonQuery();

curCommTransactionCommit();

}

catch (Exception)

{

curCommTransactionRollback();

}

finally

{

webConnectionClose();

}

}

}

unit Unit;

interface

uses

Windows Messages SysUtils Variants Classes Graphics Controls Forms

Dialogs InvokeRegistry Rio SOAPHTTPClient ExtCtrls StdCtrls

ServicetypesjpegStrUtils Buttons;

//StrUtils:取指定字符

{QDialogs:在delphi及以后的版本中

为了支持kylix能使程序在linux下运行

每一个单元都增加了对应的QDialogs单元

如果你用了带Q的单元哪么如果你的程序

要想在Windows中正常运行必须得有qtintfdll

的支持你可以搜索一个把程序中uses中的

单元前有Q的把Q去掉就ok了! }

type

TForm = class(TForm)

Label: TLabel;

Edit: TEdit;

Panel: TPanel;

Image: TImage;

HTTPRIO: THTTPRIO;

Open: TOpenDialog;

Search: TButton;

Add: TButton;

Update: TButton;

Delete: TButton;

Panel: TPanel;

Image: TImage;

Label: TLabel;

procedure SearchClick(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure ImageClick(Sender: TObject);

procedure EditKeyPress(Sender: TObject; var Key: Char);

procedure ImageClick(Sender: TObject);

procedure AddClick(Sender: TObject);

procedure DeleteClick(Sender: TObject);

procedure UpdateClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form: TForm;

files:TFileStream;

ms:TMemoryStream;

jpg:TjpegImage;

s:TByteDynArray;

path:WideString;

implementation

{$R *dfm}

procedure TFormSearchClick(Sender: TObject);

var

bmTemp:TjpegImage;//TBitmap;

Web_Search:ServiceSoap;

begin

bmTemp:=TjpegImageCreate;

//创建流

ms:=TMemoryStreamCreate;

Web_Search:=HTTPRIO as ServiceSoap;

try

if (editText<>) then

begin

//调用服务查询功能

s:=(Web_SearchSearch(editText));

if(length(s)<) then

begin

showmessage(没有图片请重输);

imagePictureAssign(nil);

end

else

begin

//从图片开始位置读取

msWrite(s[]length(s));

msPosition:=;

//加载流

bmTempLoadFromStream(ms);

//输出

imagePictureAssign(bmTemp);

end;

end

else

begin

showmessage(缺少查询条件!);

imagePictureAssign(nil);

editSetFocus;

end;

finally

//释放空间

msFree;

bmTempFree;

//控制

//editClear;

editSetFocus;

end;

end;

procedure TFormFormShow(Sender: TObject);

var

fstyle: dWord;

begin

//控制edit只输入数字

fstyle := GetWindowLong(EditHandle GWL_STYLE);

SetWindowLong(EditHandle GWL_STYLE fstyle or ES_NUMBER);

//指定图片格式

editSetFocus;

end;

procedure TFormImageClick(Sender: TObject);

var

Web_link:ServiceSoap;

begin

//测试连接

Web_link:=HTTPRIO as ServiceSoap;

showmessage(+Web_linkLinking+);

end;

procedure TFormEditKeyPress(Sender: TObject; var Key: Char);

begin

//输入控制

if key=# then

SearchClick;

end;

procedure TFormImageClick(Sender: TObject);

var

testpath:string;

testname:string;

begin

ms:=TMemoryStreamCreate;

jpg:=TjpegImageCreate;

if OpenExecute then

begin

testpath:=ExtractFileName(openFileName);

testname:=RightStr(testpath);

if (testname=jpg)or( testname=JPG) or( testname=jpeg)or( testname=JPEG)then

begin

path:=ExtractFileDir(openFileName)+\+ExtractFileName(openFileName);

files:= TFileStreamCreate(openFileNamefmShareDenyWrite);

try

jpgLoadFromStream(files);

jpgSaveToStream(ms);

imagePictureAssign(jpg);

finally

filesFree;

end;

end

else

showmessage(当前默认为JPEG类型图片);

end;

end;

end

               

上一篇:.net WinForm用户控件开发:用户控件弹出式属性设置

下一篇:.Net Micro Framework下的IO模拟器研究