??xml version="1.0" encoding="utf-8" standalone="yes"?>麻豆成人91精品二区三区,色综合激情久久,国产精品99一区二区三区http://www.aygfsteel.com/xine/category/11743.html&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I love you not because of who you are,but because of who I am when I am with you.<br><br>zh-cnThu, 01 Mar 2007 18:28:02 GMTThu, 01 Mar 2007 18:28:02 GMT60用Delphi 6开发Web Service初探http://www.aygfsteel.com/xine/articles/49689.html【Xine】中文站【Xine】中文站Thu, 01 Jun 2006 08:45:00 GMThttp://www.aygfsteel.com/xine/articles/49689.htmlhttp://www.aygfsteel.com/xine/comments/49689.htmlhttp://www.aygfsteel.com/xine/articles/49689.html#Feedback0http://www.aygfsteel.com/xine/comments/commentRss/49689.htmlhttp://www.aygfsteel.com/xine/services/trackbacks/49689.html
介:“网l就是计机QY件就是服务”的思想已经逐步深入人心。由于Web Services能够通过|络把服务直接递送给l端用户Q而且׃多主厂商所支持和描l的好前景也让我们心动不已。据有关报告预计Q?002q多C业将会对于Web服务产生兛_。另外,?004qFortune 2000家企业引q的应用软g解决Ҏ之中QWeb服务占很大的比重。最q,关于如何建立Web Service的文章较多,但大多是用VS.NET完成的,而关于如何用Delphi 6开发的文章较少。本文介l了一个用Delphi 6开发Web Service的简单的例子Q以辑ֈ抛砖引玉之效果。?br />一、 Web Service概述 
管关于Web Service是什么有各种各样的理解,但下面的定义有助于读者从不同侧面、不同层ơ了解Web Service。第一QWeb Service是一个应用程序。它通过WEB向外界提供了如何调用自n功能/服务的说明(WSDLQ。这可以让Q何h从Q何地方用它所提供的这些服务。或者这栯QWeb Service是指可以通过Web技术实现动态联动的软g。?br />W二QWeb Service是新兴的电子商务应用QIBM公司高副总裁DY仉执行官Steve Mills语)。Web Service使在Web上的彼此互联和交互更Ҏ、更有效Qƈ可以大大降低目前在B2B{环境下q行~码定制时所需的时间。第三:Web Services是透过|络享用q程服务的一U概c第四:Web Services是徏立可互操作的分布式应用程序的新^台。Web Services的主要目标是跨^台的可互操作性。Web Servicesq_是一套标准,它定义了应用E序如何在WEB上实C操作性。第五:Web Services是指一套Y件工P以及一U旨在软g通过互联|发挥类似拼装玩具作用的整体处理方式。第六:Web Service是一U想把全世界的Internet/Intranet变成一个虚拟计环境的观念和技术。第七:Web 服务是一个被包装成单一实体Q且被发布以供其它程序用的功能集合Q或者说Web 服务是Internet上一pd能够以编E的方式调用的相关的应用E序功能。还有一些其它的说法Q但通过q些定义Q我们可以看出Web Services的基本理忉|Q把软g做成服务Qƈ且遵从相应的标准Q让不同的系l可以跨^収ͼ彼此怺兼容Q具有进行无~通信和数据共享的能力。?br />接着Q我们看看关于Web Services的几个核心概c第一QWeb Services若要让异构^C不同pȝ可以怺通信和共享数据,那数据在WEB上传输必M一定的标准和格式进行,q个表示数据的标准就是XMLQ所以微软称之ؓXML Web ServicesQ。第二:不同pȝ遵从什么协议发送和接收q些标准的XML数据从而达到相互通信的目的呢Q这个必遵守的协议是SOAPQSimple Object Access Protocol单对象访问协议)。SOAP是在2000q??日由Microsoft 和IBM{公司参与制定的规范。SOAP不与M一U对象模式(如DCOM、CORBA{)相关Q它是一U独立的、通用的、基于XML标准的、文本的对象间访问协议。简而言之,SOAP是运用 XML 技术之q程q程调用 ( Remote Procedure Call) 的通讯协议。SOAP把对象间的访问请求和响应都打包成XML文档Q在对象间传递。由于SOAP传递的消息都以XML文档形式发送和接收Q它最理想、最自然的实现方式就是HTTPQ所以客L仅需具备基本 TCP/IP |络环境Q即可n用全球各处之 Web Services。第三:其他pȝ如何知道你的Web Services是完成什么功能的Q你如何让其他系l知道你的Web Services提供了哪些服务?解决办法是WSDLQWeb Service Description LanguageQWeb 服务描述语言Q。它用机器可阅读的格式描qC你的Web ServicesQ从而让其他pȝ可以调用你所提供的服务。只要我们能够取得特定Web Service的WSDLQ就可以从其中了解它提供的服务,以及如何呼叫q个Web Service。WSDL也是 XML Q只是有一定的规范要求。服务端提供 WSDL 文g最重要的用途就是向客户端提供服务端接口的描q。第四:你的Web Services如何发布以便让世界上M一个地点的人或pȝ得知你有q项服务从而调用它Q或者作为服务请求者,你如何搜索你需要的Web Services呢?q个概念为UDDIQ Universal Description, Discovery, IntegrationQ通用描述、发C集成Q。类gyahoo提供的搜索网站的引擎和B2B电子商务的品目录搜索,Web Service的提供者必dUDDI注册中心注册Q而服务的h者若搜烦某项服务Q可到UDDI注册中心查询。UDDI注册中心扮演了服务的代理者的角色。现在有商业的UDDIq营商和公众UDDI注册中心。三者的关系如下图所C: 


? 服务提供者、服务请求者、服务代理者的关系

UDDI与XML、SOAP(单对象访问协?以及WSDL(Web服务描述语言)一h为Web Services的事实上的核心标准。 ?br />二、如何用Delphi 6开发Web Services 
Web Service可以׃Q何的技术开发,Delphi6作ؓMicrosoft Windowq_的Web Services 基础环境与开发工P RAD便利性带入Web Services 开发领域,化了开发Web Services应用E序复杂度,让开发h员专注于应用面的开发,而无顾及繁琐的Web Services规格面制作。下面我们以一个简单的例子说明如何用Delphi 6开发Web Services。这个例子中我们提供了查询成l的服务Q客LQ服务请求者——可以是览器、WindowsE序甚或LinuxE序Q在q里Qؓ了简单v见,我们用了传统的WindowsE序Q可以输入学P查询出相应的成W来。?br />1、创建服务?br />首先我们要徏立一个成l表Q名UCؓGrade。我们在SQL SERVER里面建立一个TEST库,在其下徏立Grade表,它有三个字段Q分别ؓStudentID、Name、Grade。随后我们随便向里面d一些数据。然后我们配|一下ODBCQ在pȝDSN中添加一个数据源Q名Uv为GradeQ指向我们刚才徏立的TEST库。如图二所C? 


? 配置ODBC

接着我们在Delphi6里启动New | Web Services | Soap Server ApplicationQ确定后Q在接下来的对话框中选择Web App Debugger executable。我们选择q种cd制作Web Services是因个Ş态可以让我们在开发时便于调试。设|其CoClass Name为MyWebServicesTest1Q如下图所C: 


? 建立Web Services

q时Delphi会自动给我们生成一个Form和一个WebModuleQWebModule中的几个lg是帮助我们用SOAPq行通信和发布WSDL的,有了它们Q我们就可以开始集中精力编写实际的应用代码了。现在我们New一个Data Module Q在File菜单里选择New|Data ModuleQ在其上攄一个ADOQuery以连接我们的数据Q设|其ConnectionString属性ؓProvider=MSDASQL.1;Password=sa;Persist Security Info=True;User ID=sa;Data Source=GradeQ选择BuildQ然后选择微Y提供的ODBC驱动Q选下一步,使用指定的数据源名称GradeQ输入用户名U和密码定卛_Q。将该单元保存ؓdm。如图所C: 


? q数据源

现在我们要定义要存储学生信息的结构。我们New一个UnitQ在file菜单里选择New|UnitQ写上如下的代码Q?br />unit DataType; 
interface 
Uses InvokeRegistry; 
Type 
TStudentInfo=Class(TRemotable) 
Private 
FName : String; 
FGrade : Single; 
published 
Property Name : String Read FName Write FName; 
Property Grade : Single Read FGrade Write FGrade; 
end; 
implementation 
Initialization 
RemClassRegistry.RegisterXSClass(TStudentInfo); 
Finalization 
RemClassRegistry.UnRegisterXSClass(TStudentInfo); 
end. 
因ؓ学生信息需要传递到客户端,所以它必须从 TRemotable cL生。将q个Unit保存为DataType。 ?br />接着Q我们要建立用户h服务的接口,q个接口只有一个取得成l的功能。New一个UnitQ写上如下的代码Q?br />unit ServicesInterface; 
interface 
Uses InvokeRegistry,DataType; 
Type 
ISoapGrade=Interface(IInvokable) 
['{9884ADA8-8FDC-4002-94A3-2370A269018F}'] //注意Q要l这个接口分?/一个GUIDQ在Delphi里用Crtl+Shift+G产生。?br />Function GetGrade(Number:Integer):TStudentInfo;StdCall; //调用q个接口函数 
//返回一个TstudentInfocd的数据。?br />End; 
implementation 
Initialization 
InvRegistry.RegisterInterface(TypeInfo(ISoapGrade)); 
end. 
这个单元保存ؓServicesInterface。?br />然后我们要编写这个接口的实现cR在Unit2QWebModule单元Q里d实现cȝ定义。完整的代码如下Q?br />unit Unit2; 
interface 
uses SysUtils, Classes, HTTPApp, WSDLPub, SOAPPasInv, SOAPHTTPPasInv, SoapHTTPDisp, WebBrokerSOAP; 
type 
TWebModule2 = class(TWebModule) 
HTTPSoapDispatcher1: THTTPSoapDispatcher; 
HTTPSoapPascalInvoker1: THTTPSoapPascalInvoker; 
WSDLHTMLPublish1: TWSDLHTMLPublish; 
private 
{ Private declarations } 
public 
{ Public declarations } 
end; 
var 
WebModule2: TWebModule2; 
implementation 
uses WebReq,InvokeRegistry,DataType,ServicesInterface,dm;  
Type 
TSoapGrade=class(TInvokableClass,ISoapGrade) 
Protected 
Function GetGrade(Number:Integer):TStudentInfo;StdCall; 
End; //定义q个接口c?br />Function TSoapGrade.GetGrade(Number:Integer):TStudentInfo;StdCall;  
Begin 
Result:=TStudentInfo.Create; 
If ( Not Assigned( DataModule3)) Then 
DataModule3:=TDataModule3.Create(Nil); //如果DataModule3没有创徏Q则创徏它。?br />Try  
With DataModule3.ADOQuery1 Do 
Begin 
active:=false; 
sql[0]:='select * from Grade where StudentID='+inttostr(Number)+'; 
active:=true; 
//Ҏ用户输入的学号和数据库连接。?br />If (Not Eof) Then 
Begin 
Result.Name:=FieldByName('Name').AsString; 
Result.Grade:=FieldByName('Grade').AsFloat;  
//从数据库里取得合适的值给要传递的信息。?br />End 
Else 
Begin 
Result.Name:='未查询到!'; Result.Grade:=0; 
End; 
Close; 
End; 
Finally 
DataModule3.Free; DataModule3:=Nil; 
End; 
End; 
initialization 
WebRequestHandler.WebModuleClass:=TWebModule2; 
InvRegistry.RegisterInvokableClass(TSoapGrade); 
end. 
到现在,我们已经创徏了一个Web ServicesQ保存,~译Q运行,卛_Web App Debugger那里完成了此Web Services的注册工作。那么我们这个Web Services提供了什么功能?如何调用它?q些问题可以通过看看它的WSDL来看到。我们启动Web App DebuggerQ在Tools菜单下)Q然后启IEQ在地址栏里输入Q?img style="CURSOR: pointer" onclick="javascript:window.open(this.src);" src="http://www.blogcn.com/images/aurl.gif" onload="javascript:if(this.width>500)this.style.width=500;" align="absBottom" border="0" />http://localhost:1024/server.MyWebServicesTest1/wsdl/IsoapGradeQ即可看到用XML语言写成的WSDLQ有了它Q服务请求者就可以调用我们的服务了?/font>  
2、实现客LQ调用服务?br />我们建立一个普通的应用E序Q在form上面攄3个label?个edit?个button以及一个HTTPRIO1Q在WebServiceslg里Q,HTTPRIO1的URL属性设?img style="CURSOR: pointer" onclick="javascript:window.open(this.src);" src="http://www.blogcn.com/images/aurl.gif" onload="javascript:if(this.width>500)this.style.width=500;" align="absBottom" border="0" />http://localhost:1024/server.MyWebServicesTest1/soapQ以便利用SOAP通信。界面如下图所C:  


? 客户端的传统windowsE序界面

接着Z让这个客LE序知道我们刚才建立的Web Services的WSDL以便h服务Q我们必d客户端那里导入WSDL以便获得服务的接口。幸q的是,我们Ҏ不必很麻烦的自己~程QDelphi已经l我们做了。启动New | Web Services |Web Services ImporterQ然后输入WSDL所在URL地址为:http://localhost:1024/server.MyWebServicesTest1/wsdl/IsoapGradeQ接着定产生QDelphi自动会ؓ我们产生两个unitQ这h口的事情全部交lDelphiQ我们就不必了。如图所C:  


? 引入WSDL

最后,在Form1的确定按钮的OnClick事g里添加如下的代码Q?br />procedure TForm1.Button1Click(Sender: TObject); 
Var 
Student:TStudentInfo; 
begin 
Student:=(HTTPRIO1 As ISoapGrade).GetGrade(StrToInt(Edit1.Text)); 
If (Assigned(Student)) Then 
Begin 
Edit2.Text:=Student.Name; 
Edit3.Text:=floattostr(Student.Grade); 
End; 
end; 
q注意要在unit1的uses中添加unit2和unit3。保存,~译。至此我们的客户端程序开发完毕,调用Web Services是不是很单?下图是客L调用的结果: 


? 调用的执行结?br />
目前互联|上已经有一些网站罗列了许多Web ServicesQ例?img style="CURSOR: pointer" onclick="javascript:window.open(this.src);" src="http://www.blogcn.com/images/aurl.gif" onload="javascript:if(this.width>500)this.style.width=500;" align="absBottom" border="0" />http://www.xmethods.comQ上面有关于各个Web  Services说明以及WSDL的描qͼ读者若有兴可以自q写客LE序引入上面的WSDL。当读者能够利用自q写的客户端跨各U^台和|络l构Q调用地球另一侧的Z许用java写成的Web ServicesӞ怿你一定ؓWeb Services的强大而欢ƣ鼓舞。?br />三、小l?br />从上面的例子我们可以看到Q只要理解了Web Services的概念,熟悉了Web Services的开发步骤,在Delphi的帮助下Q开发Web Services不是一件很困难的事情。Web Services最适合用于开发跨q_和跨|络q行通信Q因Z用http协议为防火墙所允许Q的E序Q可以跨异质架构,联系客户、供应商、企业伙伴以及企业内部之信息pȝQ是电子商务B2B集成的最佳选择。各个公司只要把商务逻辑“暴霜y出来,成ؓWeb ServiceQ就可以让Q何指定的合作伙伴调用q些商务逻辑Q而不他们的pȝ在什么^Cq行Q用什么开发语a。但也没有必要把所有的软g都做成Web ServicesQ正如“尺有所短,寸有所镎쀝一P传统的windowsE序也大有用武之地。Web Services是目前很热门也是正在q速发展着的一Ҏ术,本文只是作者在学习中的一点小体会Q肯定有理解不深ȝ或错误的地方Q欢q大家予以指正。?br />

]]>
Delphi 6用戶端應用程式藉由THTTPRIO呼叫遠端Web Servicehttp://www.aygfsteel.com/xine/articles/49686.html【Xine】中文站【Xine】中文站Thu, 01 Jun 2006 08:44:00 GMThttp://www.aygfsteel.com/xine/articles/49686.htmlhttp://www.aygfsteel.com/xine/comments/49686.htmlhttp://www.aygfsteel.com/xine/articles/49686.html#Feedback0http://www.aygfsteel.com/xine/comments/commentRss/49686.htmlhttp://www.aygfsteel.com/xine/services/trackbacks/49686.html


Delphi 6用戶端應用程式藉由THTTPRIO呼叫遠端Web Service

Delphi 6用戶端應用程式藉由THTTPRIO呼叫遠端Web ServiceQ而TOPToSoapDomConvert可以把Object Pascal的呼叫和參數自動轉換為SOAP裝的格式資a,再藉由THTTPReqResp傳送HTTP包。而在伺服端THTTPSoapDispatcher則負責處理用戶端傳送來的SOAP/HTTP資訊Q並且透過THTTPSoapPascalInvoker元g來自動啟動能夠處理這個SOAP/HTTP請求的Object PascalE式{至於TWSDLHTMLPublish則能夠自動的ҎDelphi實作的Web Service來產生WSDL並且輸出此WSDL讓用戶端應用E式能夠使用這個WSDL來呼叫Web Service?/p>

It's important to realize that a Web App Debugger executable project should not be deployed on the Internet—for that, you need to pick one of the first four targets.



]]>
怎么判断一个文件是不是文本cd文g?http://www.aygfsteel.com/xine/articles/49683.html【Xine】中文站【Xine】中文站Thu, 01 Jun 2006 08:43:00 GMThttp://www.aygfsteel.com/xine/articles/49683.htmlhttp://www.aygfsteel.com/xine/comments/49683.htmlhttp://www.aygfsteel.com/xine/articles/49683.html#Feedback0http://www.aygfsteel.com/xine/comments/commentRss/49683.htmlhttp://www.aygfsteel.com/xine/services/trackbacks/49683.htmlfunction IsTextFile(FileName:string):boolean;
var
  Fs:TFileStream;
  i,size:integer;
  IsTextFile:boolean;
  ByteData:Byte;
begin
  if FileExists(FileName) then
  begin
    Fs:=TFileStream.Create(FileName,fmOpenRead);
    IsTextFile:=true;
    i:=0;
    size:=Fs.Size;
    While (i<size) and IsTextFile do
    begin
      Fs.Read(ByteData,1);
      IsTextFile:=ByteData<>0;
      inc(i)
    end;
    Fs.Free;
    Result:=IsTextFile
  end
  else
    Result:=false
end;

  

]]>
վ֩ģ壺 ͨ| | ֯| | ½| Ž| ɯ| | | | ϴ| ͬ| Ϫ| | ױ| | | | ɶ| | Һ| | ֹ| ɳƺ| | | IJ| ɽ| ٽ| °Ͷ| ͬ| | ¸| | ϰ| ͬ| γ| | | ֣| ʯ|