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());
        }
    复制代码

    调用成功。

  • 相关阅读:
    3月工作问题总结
    【读书笔记】linux编程艺术
    项目管理工具 Trac入门
    [node.js]开放平台接口调用测试
    mysql 高并发更新计数问题
    memcache 问题 socket or its streams already null in trueClose call
    hadoop学习笔记
    node.js学习与应用
    mc参数备忘&javajson备忘
    WCF技术剖析_学习笔记之三
  • 原文地址:https://www.cnblogs.com/xiezhi/p/6288846.html
Copyright © 2011-2022 走看看