V
vinch_sh
Unregistered / Unconfirmed
GUEST, unregistred user!
所用的webservice是其他公司用java开发的,年代久远,连开发人员都联系不上了,跟维护人员也没办法做开发上的交流。通讯双方是走基于soap协议,传送xml信息。
自己用delphi7写了个小程序来验证对方提供的webservice接口是否能正常使用,结果就发现了一堆各种各样的问题。难道是delphi7会挑java的开发平台和service系统吗,单从理论上看,soap难道不是说支持跨语言和跨平台的吗。
试了几种调用方式,也没成功,还报了几种错误。现在把问题贴出来,希望有经验的朋友可以提点一下。极度感激~~
//----------------------------------------------------------------
以下是对方提供的接口信息:
http://192.168.112.9:6080/ccatsida/services/AsigService
调用executeXML方法,使用以下的XML串做参数:
<?xml version="1.0"
encoding="GBK"?>
<SERVICE>
<PARAM NAME="i_Telephone"
TYPE="12"
TAG="0"
VALUE="通知的号码"/>
</SERVICE>
返回的xml信息应该为:
<?xml version="1.0"
encoding="GBK"?> <SERVICE><OUTPUT NAME="o_RetVal"
VALUE="0"/>SERVICE>
//---------------------------------------------------------------
下面是我访问和调用webservice的全部过程:
方法一:
先从delphi7提供的webservice import向导中输入Url地址,http://192.168.112.9:6080/ccatsida/services/AsigService?wsdl来导入wsdl信息,这一步成功了,还生成了名为AsigService1的unit单元,该单元里那个函数的声明为
function executeXML(const inXmlString: WideString): WideString;
stdcall;
然后,就在界面上放1个THTTPRIO控件和1个button,名字分别叫HTTPRIO1和button1.
最后在单击button,在其中执行函数调用,代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
ser:AsigService;
input:widestring;
output:widestring;
begin
input:='123';
//HTTPRIO1.URL:='http://192.168.112.9:6080/ccatsida/services/AsigService';
HTTPRIO1.WSDLLocation:= ExtractFilePath(Application.ExeName)+ 'Iface.wsdl';
HTTPRIO1.Service:='AsigServiceService';
HTTPRIO1.Port:='AsigService';
//ser := (HTTPRIO1 as AsigService);
ser := GetAsigService(false,'',HTTPRIO1);
output:=ser.executeXML(input);
end;
ps: 被注释的部分,是以通过设置url的方法来调用webservice的方式。
编译,执行程序,点button1先报错为
“Project Project1.exe raised exception class ESOAPHTTPException with message '无法与服务器建立连接'-URL:http://192.168.112.9:6080/ccatsida/services/AsigService -SOAPAction:"".Process stopped.”
点了异常对话框上的OK后,又弹出个错误为,
“ 无法与服务器建立连接 -URL: URL:http://192.168.112.9:6080/ccatsida/services/AsigService -SOAPAction”。
ps: 实际上该系统已经在被其他java开发的系统在使用,接口和网络情况都正常,我用delphi7也能通过url来导入wsdl信息。
该问题比较棘手,以前多碰到的是同语言之间的webservice互相做soap通讯和传递xml信息,现在刚学着用delphi7来访问java的webservice就被卡住了。不清楚到底是调用方法和设置上的问题,还是java那边的问题,希望有达人指点。
自己用delphi7写了个小程序来验证对方提供的webservice接口是否能正常使用,结果就发现了一堆各种各样的问题。难道是delphi7会挑java的开发平台和service系统吗,单从理论上看,soap难道不是说支持跨语言和跨平台的吗。
试了几种调用方式,也没成功,还报了几种错误。现在把问题贴出来,希望有经验的朋友可以提点一下。极度感激~~
//----------------------------------------------------------------
以下是对方提供的接口信息:
http://192.168.112.9:6080/ccatsida/services/AsigService
调用executeXML方法,使用以下的XML串做参数:
<?xml version="1.0"
encoding="GBK"?>
<SERVICE>
<PARAM NAME="i_Telephone"
TYPE="12"
TAG="0"
VALUE="通知的号码"/>
</SERVICE>
返回的xml信息应该为:
<?xml version="1.0"
encoding="GBK"?> <SERVICE><OUTPUT NAME="o_RetVal"
VALUE="0"/>SERVICE>
//---------------------------------------------------------------
下面是我访问和调用webservice的全部过程:
方法一:
先从delphi7提供的webservice import向导中输入Url地址,http://192.168.112.9:6080/ccatsida/services/AsigService?wsdl来导入wsdl信息,这一步成功了,还生成了名为AsigService1的unit单元,该单元里那个函数的声明为
function executeXML(const inXmlString: WideString): WideString;
stdcall;
然后,就在界面上放1个THTTPRIO控件和1个button,名字分别叫HTTPRIO1和button1.
最后在单击button,在其中执行函数调用,代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
ser:AsigService;
input:widestring;
output:widestring;
begin
input:='123';
//HTTPRIO1.URL:='http://192.168.112.9:6080/ccatsida/services/AsigService';
HTTPRIO1.WSDLLocation:= ExtractFilePath(Application.ExeName)+ 'Iface.wsdl';
HTTPRIO1.Service:='AsigServiceService';
HTTPRIO1.Port:='AsigService';
//ser := (HTTPRIO1 as AsigService);
ser := GetAsigService(false,'',HTTPRIO1);
output:=ser.executeXML(input);
end;
ps: 被注释的部分,是以通过设置url的方法来调用webservice的方式。
编译,执行程序,点button1先报错为
“Project Project1.exe raised exception class ESOAPHTTPException with message '无法与服务器建立连接'-URL:http://192.168.112.9:6080/ccatsida/services/AsigService -SOAPAction:"".Process stopped.”
点了异常对话框上的OK后,又弹出个错误为,
“ 无法与服务器建立连接 -URL: URL:http://192.168.112.9:6080/ccatsida/services/AsigService -SOAPAction”。
ps: 实际上该系统已经在被其他java开发的系统在使用,接口和网络情况都正常,我用delphi7也能通过url来导入wsdl信息。
该问题比较棘手,以前多碰到的是同语言之间的webservice互相做soap通讯和传递xml信息,现在刚学着用delphi7来访问java的webservice就被卡住了。不清楚到底是调用方法和设置上的问题,还是java那边的问题,希望有达人指点。