php 调用.net的webservice 需要注意的

首先

SoapClient类
这个类用来使用Web services。SoapClient类可以作为给定Web services的客户端。
它有两种操作形式:
* WSDL 模式
* Non-WSDL 模式
在WSDL模式中,构造器可以使用WSDL文件名作为参数,并从WSDL中提取服务所使用的信息。
non-WSDL模式中使用参数来传递要使用的信息。这个类有许多可以用来使用服务的有用的方法。其中SoapClient::__soapCall()是最重要的。这个方法可以用来调用服务中的某个操作。

 

 

<?php
/** 
* Client端 
*/ 
$ws = " http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl";
$client = new soapclient($ws,array ('trace'=>0,'uri'=>' http://WebXml.com.cn/'));
$client->soap_defencoding = 'UTF-8';
$client->decode_utf8 = false;
/** 
* 使用$client->__getFunctions();
*可以得到webservice提供的方法

*下面调用的即是其中一个

*这个方法是用来获得某省的城市的

*具体的说明可以在浏览器中输入

http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl查看
**/

$client->getSupportCity("福建");//这个方法要求的参数是string型或为空
?>

错误信息如下:

Fatal error: Uncaught SoapFault exception: [soap:Server] 服务器无法处理请求。 ---> 未将对象引用设置到对象的实例。 in D:\EclipseDocument\weather\Client.php:23 Stack trace: #0 [internal function]: SoapClient->__call('getSupportCity', Array) #1 D:\EclipseDocument\weather\Client.php(23): SoapClient->getSupportCity('??????') #2 {main} thrown in D:\EclipseDocument\weather\Client.php on line 23

试用

$client->__call('getSupportCity', '福建');

一样出错

webmethod 说明:

- <wsdl:types>

- <s:schema elementFormDefault="qualified" targetNamespace="http://WebXml.com.cn/">

- <s:element name="getSupportCity">

- <s:complexType>

- <s:sequence>

<s:element minOccurs="0" maxOccurs="1" name="byProvinceName" type="s:string" />

</s:sequence>

</s:complexType>

</s:element>

 

是什么原因导致的呢?

该怎么解决?

回答:

.net 对php调用其webservice 有一个规则

代码如下

$param["arg1"]="value1";

$client->__Call('WebMethodName',array($param));

键名 agr1 是方法 WebMethodName 的参数名,不能变

__call()函数

第一个参数是要调用的方法

第二个参数是二维数组

 

 

示例二、

web融合业务调用电信的服务器方法http://219.143.33.58/WebConsumeTest/WebConsume.asmx

复制代码
try{
        
        $client = new SoapClient("http://219.143.33.58/WebConsumeTest/WebConsume.asmx?wsdl");
        //$addResult = $client->__getFunctions();
        //$timeResult = $client->webConsumeReq(array('SPID'=>"35101282",'productID'=>"135000000000000229025",'address'=>"13386530106",'content'=>"abc123"));
        //$addResult = $client->add(1,6);
        $addResult = $client->__call('webConsumeReq',array(array('SPID'=>"35101282",'productID'=>"135000000000000229025",'address'=>"13386530106",'content'=>"abc123")));
        //$addResult = $client->__soapCall('webConsumeReq',array('SPID'=>"35101282",'productID'=>"135000000000000229025",'address'=>"13386530106",'content'=>"abc123"));
        var_dump( $addResult);    
         
    }catch(Exception $e){
        printf("Message=%s \n",$e->__toString());
    }
复制代码

 

调用成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值