用delphi7写的client去调用java写的webservice报错,急~~(100分)

  • 主题发起人 主题发起人 vinch_sh
  • 开始时间 开始时间
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=&quot;1.0&quot;
encoding=&quot;GBK&quot;?>
<SERVICE>
<PARAM NAME=&quot;i_Telephone&quot;
TYPE=&quot;12&quot;
TAG=&quot;0&quot;
VALUE=&quot;通知的号码&quot;/>
</SERVICE>
返回的xml信息应该为:
<?xml version=&quot;1.0&quot;
encoding=&quot;GBK&quot;?> <SERVICE><OUTPUT NAME=&quot;o_RetVal&quot;
VALUE=&quot;0&quot;/>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:&quot;&quot;.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那边的问题,希望有达人指点。
 
我做过这方面的工作,DELPHI通过WS联JAVA一点问题都没有
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3289979
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3172226
 
楼主意思是说,“按照规则,需要符合JavaBean规范,并且实现了Serializable接口”,如果service那边没有严格的实现序列化接口,也有出这种错误的可能性。
先搭个模拟环境验证一下。尽管还没确定问题的原因,还是先感谢楼主提供的信息。
 
程序没错,估计是数据传输时被系统挡住了
 
已解决,程序OK,问题与系统设置有关
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
875
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部