Delphi调用WebServices(C#)代码
【IT168 技术文档】
using System; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using System.Data; using System.Data.OracleClient; using System.IO; using System.IO.Compression; using System.Runtime.Serialization.Formatters.Binary; [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class Service : System.Web.Services.WebService { 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(); cnnStrBuilder.UserID = ""; cnnStrBuilder.Password = ""; cnnStrBuilder.DataSource = ""; return cnnStrBuilder.ConnectionString; } public Service() { //如果使用设计的组件,请取消注释以下行 //InitializeComponent(); } [WebMethod(Description = "判断空值")] private OracleParameter CreateParam(string ParamName, object ParamValue) { OracleParameter Result = new OracleParameter(); Result.ParameterName = ParamName; if (ParamValue != null) { Result.Value = ParamValue; } else { Result.Value = DBNull.Value; } return Result; } [WebMethod(Description = "测试连接")] public string Linking() { return "WebService连接成功!"; } [WebMethod(Description = "查询信息")] public byte[] Search(string img) { try { webConnection = new OracleConnection(GetCurCnnStr()); webConnection.Open(); //查询表中的所有的数据 OracleDataAdapter webAdapter = new OracleDataAdapter("select pic from pic where id=" + img, webConnection); DataSet webDataTable = new DataSet(); //byte[] webDataTable = new byte[0]; webAdapter.Fill(webDataTable); webConnection.Close(); //序列化为二进制 webDataTable.RemotingFormat = SerializationFormat.Binary;//确定序列化格式 BinaryFormatter bFormatter = new BinaryFormatter(); MemoryStream mStream = new MemoryStream(); bFormatter.Serialize(mStream, webDataTable); byte[] bytes = mStream.ToArray();//将数据流写入字节数组 //返回数组 return bytes; } catch (Exception) { curComm.Transaction.Rollback(); return null; } finally { webConnection.Close(); } } [WebMethod(Description = "添加信息")] public void Add(string id, byte[] Image) { try { webConnection = new OracleConnection(GetCurCnnStr()); curComm.Connection = webConnection; webConnection.Open(); curComm.Transaction = webConnection.BeginTransaction(); curComm.CommandText = "insert into pic(id,pic)values(:pId,:pPic)"; curComm.Parameters.Add(CreateParam("pId", (id != null) ? id : null)); curComm.Parameters.Add(CreateParam("pPic", (Image != null) ? Image : null)); curComm.ExecuteNonQuery(); curComm.Transaction.Commit(); } catch (Exception) { curComm.Transaction.Rollback(); } finally { webConnection.Close(); } } }
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, InvokeRegistry, Rio, SOAPHTTPClient, ExtCtrls, StdCtrls,
Service,types,jpeg,StrUtils, Buttons;
//StrUtils:取指定字符
{QDialogs:在delphi6及以后的版本中,
为了支持kylix,能使程序在linux下运行
每一个单元都增加了对应的QDialogs单元
如果你用了带Q的单元,哪么如果你的程序
要想在Windows中正常运行必须得有qtintf.dll
的支持你可以搜索一个,把程序中uses中的
单元前有Q的把Q去掉就ok了! }
type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Panel1: TPanel;
Image1: TImage;
HTTPRIO1: THTTPRIO;
Open: TOpenDialog;
Search: TButton;
Add: TButton;
Update: TButton;
Delete: TButton;
Panel2: TPanel;
Image2: TImage;
Label2: TLabel;
procedure SearchClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Image2Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Image1Click(Sender: TObject);
procedure AddClick(Sender: TObject);
procedure DeleteClick(Sender: TObject);
procedure UpdateClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
files:TFileStream;
ms:TMemoryStream;
jpg:TjpegImage;
s:TByteDynArray;
path:WideString;
implementation
{$R *.dfm}
procedure TForm1.SearchClick(Sender: TObject);
var
bmTemp:TjpegImage;//TBitmap;
Web_Search:ServiceSoap;
begin
bmTemp:=TjpegImage.Create;
//创建流
ms:=TMemoryStream.Create;
Web_Search:=HTTPRIO1 as ServiceSoap;
try
if (edit1.Text<>'') then
begin
//调用服务查询功能
s:=(Web_Search.Search(edit1.Text));
if(length(s)<6229) then
begin
showmessage('没有图片,请重输');
image1.Picture.Assign(nil);
end
else
begin
//从图片开始位置读取
ms.Write(s[6229],length(s));
ms.Position:=0;
//加载流
bmTemp.LoadFromStream(ms);
//输出
image1.Picture.Assign(bmTemp);
end;
end
else
begin
showmessage('缺少查询条件!');
image1.Picture.Assign(nil);
edit1.SetFocus;
end;
finally
//释放空间
ms.Free;
bmTemp.Free;
//控制
//edit1.Clear;
edit1.SetFocus;
end;
end;
procedure TForm1.FormShow(Sender: TObject);
var
fstyle: dWord;
begin
//控制edit只输入数字
fstyle := GetWindowLong(Edit1.Handle, GWL_STYLE);
SetWindowLong(Edit1.Handle, GWL_STYLE, fstyle or ES_NUMBER);
//指定图片格式
edit1.SetFocus;
end;
procedure TForm1.Image2Click(Sender: TObject);
var
Web_link:ServiceSoap;
begin
//测试连接
Web_link:=HTTPRIO1 as ServiceSoap;
showmessage(''+Web_link.Linking+'');
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
//输入控制
if key=#13 then
Search.Click;
end;
procedure TForm1.Image1Click(Sender: TObject);
var
testpath:string;
testname:string;
begin
ms:=TMemoryStream.Create;
jpg:=TjpegImage.Create;
if Open.Execute then
begin
testpath:=ExtractFileName(open.FileName);
testname:=RightStr(testpath,4);
if (testname='.jpg')or( testname='.JPG') or( testname='.jpeg')or( testname='.JPEG')then
begin
path:=ExtractFileDir(open.FileName)+'\'+ExtractFileName(open.FileName);
files:= TFileStream.Create(open.FileName,fmShareDenyWrite);
try
jpg.LoadFromStream(files);
jpg.SaveToStream(ms);
image1.Picture.Assign(jpg);
finally
files.Free;
end;
end
else
showmessage('当前默认为JPEG类型图片');
end;
end;
end.
0
相关文章