❶ 如何在delphi中调用WebService
Delphi 调用webservice接口
一、使用向导
1.导入wsdl文件:file--new----other----webservice---WSDLimporter---输入wsdl地址
http//ww.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl
完成之后,即可导入wsdl文件。
注:结尾处的'?wsdl'不能少。
2.在导入的wsdl文件中手动添加部分注册代码:
InvRegistry.RegisterInterface(TypeInfo(qqOnlineWebServiceSoap), 'http://WebXml.com.cn/', 'utf-8');
InvRegistry.RegisterInvokeOptions(TypeInfo(qqOnlineWebServiceSoap),ioDocument);//此处必须手动添加,delphi无法自动生成
InvRegistry.RegisterDefaultSOAPAction(TypeInfo(qqOnlineWebServiceSoap), 'http//WebXml.com.cn/qqCheckOnline');
3.调用代码
4.运行结果
❷ delphi7 WebServices 读取数据
delphi7可以做webservice
步骤:
服务端
file -> new -> other -> webservices -> soap server applicaion
然后选择对应的发布平台(发布到apache下还是iis下)开发过程可以选择 web app debugger
填上你的classname
这样就创建了一个webservice 的服务端
然后在interface中声明要发布的webservice接口,在class中实现这个接口,具体实现可以参考delphi安装路径下demo文件夹中webservice例子
客户端:
启动服务端
file -> new -> other -> webservices -> wsdl importer,然后把刚才发布的webservice server的wsdl文件路径复制上,然后会生成代理类,然后调用这个代理类来访问server
同样在delphi文件夹下的demo文件夹中也有客户端的例子
❸ 如何在delphi中调用WebService
首先服务端应该有接口文档地址,类似的http://ip:port/interfacename?wsdl。在delphi中使用import wsdl导入接口文档,在接口文档中会有一个GetqqXXXWebServiceSoap的全局方法,你需要传入一个httprio对象,调用此方法就会返回一个接口对象,通过这个接口对象就可以调用webservice的方法。
❹ java如何调用delphi写的webservice
web service 一般是用 HTTP / HTTPS 协议来访问的,也就是说只要对方给一个 WSDL 给我们并且说明了它处理这个请求的 URL 是什么,我们就可以把我们的调用参数和方法名拼接成一个 xml 文件向这个 http URL 发送,然后接收它的回复 xml 再解码数据就完成了。
你只要了解一个什么叫 web service (具体来说,现在都是 SOAP 方式的),通信双方是用 xml 通过 http 协议交互的,这个xml 文件包括一个你想要调用的操作名称(它是一个xml tag),它有些子 tag 就是参数了。回复的 xml 也是类似,子tag 就是返回值或异常消息。
❺ delphi开发webservice IIS 配置不成功 wsdl在哪里生成
下面说明如何编写用于IIS发布的ISAPI类型的WebService。
1、 New|Other|WebServices|SOAP Server Application|这里先选择建立Web App Debugger
类型的WebService,因为这种类型的WebService便于调试,当我们调试好它,准备发布时再将
此类型转换为ISAPI类型。
2、 选择Web App Debugger后,随便输入一个ClassName,这里我们输入“Test”
3、 随后Delphi会询问你是否建立接口单元,选择是,然后输入接口的名字,我们输入Main,
Delphi将自动建立接口单元(名字为你输入的接口名+Intf结束,即MainIntf)和实现接口的单
元(名字为你输入的接口名+Impl,即MainImpl)。到此一个空的WebService已建立好。
4、 接下来我们将编写供别人调用的WebService函数。在此我们编写一个简单的例子。打开接口单元
(MainIntf),在Type后,接口声明后添加接口函数
“function GetMsg(AMsg: string): String; stdcall;”,函数后面必须加上“stdcall”。
5、接口函数的声明已经完成,下面就是要实现这个函数了。打开接口实现单元(MainImpl),
在public中写上该函数的声明,在implement后写该函数的实现。
6、到此,WebService已经撰写完毕。接下来是调试。在我们新建的时候,Delphi已经为我们
建立了一个Unit1和其窗体,在Unit1中引用接口单元(MainImpl),然后在窗体中加一个
按钮,在按钮的单击事件中调用刚才写的WebService函数就可以调试了,
7、调试成功后就可以转类型了,将Web App Debugger类型转换为ISAPI类型其实很简单,我们
先重新建一个ISAPI类型的WebService项目,依次选择New|Other|WebServices|
SOAP Server Application|ISPA/…,提示是否创建接口时选择“是”,然后输入和刚才一
样的接口名,接着保存好,然后将调试成功的Web App Debugger类型的WebService项目中的
接口单元和接口实现单元复制替换掉刚刚创建的ISAPI类型项目中的接口单元和接口实现单元,
然后打开ISAPI类型的WebService,编译生成dll。至此ISAPI类型的WebService建立成功。
8、将ISAPI类型的WebService发布到IIS上。在IIS中新建站点,新建时将执行权限设置成“脚本
和可执行文件”,将WebService整个项目拷贝到站点文件夹下,启动站点,该WebService就算
发布成功了,如果IIS是6.0以上的注意在Web服务扩展中将“所有未知ISAPI扩展”设置为允许,
具体设置可参见IIS帮助文档。
9、如何用Delphi调用刚才写的WebService。在浏览器中输入刚才站点的路径,如:
http://192.168.1.5:90/,浏览器转到项目所在文件夹,
点击bin,打开生成的dll文件夹,再点击生成的dll文件,打开如下图所示的的dll描述页面,
该dll中有三个接口函数HZ,LJ,SaveData,它们都是供别人调用的接口函数。
点击WSDL打开WSDL描述页面,此时复制该页面的网址,这个网址是我们要用到的。
10、 得到网址后,新建一个Application,我们就在这个Application中调用刚才的WebService。
依次点击New|Other|WebServices|WSDL Import,如后提示输入网址,我们输入刚才复制的
网址,点击next,finish,此时Delphi将自动添加一个单元,该单元就是调用WebService的
单元,有了这个单元我们就可以调用WebService了。在Unit1中引用该单元,再添加一个按钮,
在按钮的单击事件中声明一个接口对象,然后调用自动生成单元中的GetMainIntf(该方法是
自动生成的)函数给这个接口对象赋值,然后就可以用这个接口对象调用接口函数了。
❻ delphi中用DLL封装WEBSERVICE接口 老是报内存错误,望高手指教
请检查
打开“系统属性”,请依次单击“开始”、“控制面板”,然后双击“系统”。
单击“高级”选项卡,之后单击“性能”下的“设置”。
单击“数据执行保护”选项卡。
看看是不是将你的dll做例外;
如果不是可能你无法调用webservice ;
❼ delphi调用webservice方法一直出错,求助
请检查打开“系统属性”,请依次单击“开始”、“控制面板”,然后双击“系统”。 单击“高级”选项卡,之后单击“性能”下的“设置”。 单击“数据执行保护”选项卡。 看看是不是将你的dll做例外;如果不是可能你无法调用webservice ;
❽ 请教,用Delphi开发WebService数据库系统
TADOQuery,TDataSource,TDBGrid
ADOQuery1设置ConnnectionString属性连接数据库或Connection属性设置为其他连接数据库的组件,如ADOConnection,
DataSource1的DataSet属性设置为ADOQuery1,
DBGrid1的DataSource属性设置为DataSource1。
然后你要查询哪个表或哪些数据时,在ADOQuery1的SQL属性输入SQL语句。
或在代码里这样写:
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.add('select * from 表名');
ADOQuery1.open;
每次打开connect为true的时候总弹出个对话框,要输入用户名还有密码
你是用TADOConnection连接数据库的吗?
是的话把ADOConnection的LoginPrompt属性设置成False.
ADOQuery1:Missing SQL property:是因为你连接时,没有SQL语句(ADOQuery1的SQL属性是空的)。
❾ Delphi 调用WebService 直接发送SOPA报文
有一些WebService使用D7的HTTPRIO控件已经不能正常调用了,
这个时候可以直接使用HTTPReqResp控件直接发送报文,
或者使用TIdHTTP控件 http post方式请求 webservices soap 协议接口
函数示例:
HTTPReq: THTTPReqResp;
function TDM_Demo.WebSrvMain( In_fkey_XML,In_funccode,In_fparam_XML:String):String;
var
DataMsg:WideString;
strStream, strSend: TStringStream;
begin
//使用SOPAUI等工具获得标准示例报文DataMsg
DataMsg:='<?xml version="1.0" encoding="utf-8"?>'+
'<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"'+
' xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" '+
'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" '+
'xmlns:xsd="http://www.w3.org/2001/XMLSchema">'+
'<SOAP-ENV:Body>'+
'<m:funMain xmlns:m="http://services.dtshis/">'+
'<In_fkey_XML><![CDATA['+In_fkey_XML+']]></In_fkey_XML>'+
'<In_funccode>'+In_funccode+'</In_funccode>'+
'<In_fparam_XML><![CDATA['+In_fparam_XML+']]></In_fparam_XML>'+
'</m:funMain></SOAP-ENV:Body></SOAP-ENV:Envelope>';
strStream := TStringStream.Create('');
strSend := TStringStream.Create(AnsiToUtf8(DataMsg)); //Utf8转码
try
HTTPReq.url := ' 服务地址 ';
HTTPReq.Execute(strSend, strStream);
result := strStream.DataString;
result := UTF8Decode(result);
//xml < > " 转码
result := StringReplace(result,'<','<',[rfReplaceAll, rfIgnoreCase]);
result := StringReplace(result,'>','>',[rfReplaceAll, rfIgnoreCase]);
result := StringReplace(result,'"','"',[rfReplaceAll, rfIgnoreCase]);
//转为delphi XMLDocument 文档
result := StringReplace(result,'<?xml version="1.0" encoding="UTF-8"?>',
'<?xml version="1.0" encoding="gb2312"?>',[rfReplaceAll, rfIgnoreCase]);
finally
strStream.Free;
strSend.Free;
end;
end;
http post方式请求 webservices soap 协议接口
with IdHttp do
begin
ProtocolVersion := pv1_1;
AllowCookies := True;
ProxyParams.BasicAuthentication := False;
ProxyParams.ProxyPort := 0;
Request.ContentLength := -1;
Request.Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
Request.BasicAuthentication := False;
Request.ContentType := 'application/x-www-form-urlencoded';
HTTPOptions :=[hoKeepOrigProtocol, hoInProcessAuth];
ReadTimeout:=5000;
end;
strSend.WriteString(DataMsg);
result:=IdHttp.Post(sWSDLAddr,strSend);