zoukankan      html  css  js  c++  java
  • 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:EclipseDocumentweatherClient.php:23 Stack trace: #0 [internal function]: SoapClient->__call('getSupportCity', Array) #1 D:EclipseDocumentweatherClient.php(23): SoapClient->getSupportCity('??????') #2 {main} thrown in D:EclipseDocumentweatherClient.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 
    ",$e->__toString());
        }
    复制代码

    调用成功。

  • 相关阅读:
    DB2 for Z/os Statement prepare
    Foreign key (referential) constraints on DB2 LUW v105
    复制Informational constraints on LUW DB2 v105
    DB2 SQL Mixed data in character strings
    DB2 create partitioned table
    MVC中使用EF的技巧集(一)
    Asp.Net MVC 开发技巧(二)
    Linq使用技巧及查询示例(一)
    Asp.Net MVC 开发技巧(一)
    Asp.Net MVC Identity 2.2.1 使用技巧(八)
  • 原文地址:https://www.cnblogs.com/xiezhi/p/6288846.html
Copyright © 2011-2022 走看看