请教各位:
    首先,我明白PHP可以使用soapclient 生成实例 调用.NET中暴露的接口方法。PHP代码如下:
$client = new soapclient("http://123.456.78.9/websvclient/Service.asmx?WSDL",'wsdl');
$aryPara = array('strAccount'=>'admin' ,'strPassword'=>'pass');
/*
* @return: webservice result
* @param 1: webservice method
* @param 2: Account and password
*/
$result = $client->call('OfferList', $aryPara);
上述代码对应的.NET写法是(本人不懂.NET)
        
// 实例化对象 并获取订单的XML字符串
      ServiceReference1.CollectionServiceSoapClient obj = new ServiceReference1.CollectionServiceSoapClient();
      System.Xml.XmlElement xml = obj.OfferList("admin".ToString(), "pass".ToString());    PHP向.NET的webservice发送请求,.NET中接口方法的参数是分别写的,PHP中需要将参数当做一个数组。但如果.NET中某个参数是xml字符串,在PHP中怎么写才能正确发送请求呢?
.NET的客户端请求代码如下:    ......................//此处省去dsNew内容代码若干行
    string strXdoc = "";
    // 把Dataset转换成XML字符串
    strXdoc = dsNew.GetXml();    XmlDocument Xdoc = new XmlDocument();
    Xdoc.LoadXml(strXdoc);   //发送XMl到Webservice,找返回一个XML
   XmlElement xmlSaveStatus = obj.OfferSave("admin".ToString(), "pass".ToString(),txtContactEmail.Value, Xdoc.DocumentElement);请教一下上述代码用PHP实现应该如何写,最关键的就是最后一个参数xml,PHP传参数时必写入数组,但是xml作为数组元素
却没有对应的键名,如
$aryPara = array('strAccount'=>'admin' ,'strPassword'=>'pass','txtContactEmail'=>'[email protected]','?'=>'?');
望各位大牛 不吝赐教 拜谢!

解决方案 »

  1.   

    给出 WSDL 文本
    即直接访问 http://123.456.78.9/websvclient/Service.asmx?WSDL 得到的页面内容
      

  2.   

    显示如下:
      <soap:Body>
        <OfferSave xmlns="http://tempuri.org/">
          <strEmail>string</strEmail>
          <strPassword>string</strPassword>
          <strOtherEmail>string</strOtherEmail>
          <strcontactPhone>string</strcontactPhone>
          <strPaymentCondition>string</strPaymentCondition>
          <strComment>string</strComment>
          <xml>xml</xml>
        </OfferSave>
      </soap:Body>
    我把最后一个数组元素写为: 'xml'=>$xml
    报错如下:Array ( [faultcode] => soap:Server [faultstring] => Server was unable to process request. ---> Object reference not set to an instance of an object. [detail] => ) 
      

  3.   

    .NET 里面的 Xdoc.DocumentElement 与PHP里面的$xml 可以划等号吗?var_dump($xml);结果如下:object(SimpleXMLElement)#22 (1) {
      ["ds"]=>
      array(3) {
        [0]=>
        object(SimpleXMLElement)#23 (3) {
          ["stone"]=>
          string(7) "SH04778"
          ["discount"]=>
          string(3) "-25"
          ["Status"]=>
          object(SimpleXMLElement)#26 (1) {
            [0]=>
            string(1) " "
          }
        }
        [1]=>
        object(SimpleXMLElement)#24 (3) {
          ["stone"]=>
          string(7) "SH04785"
          ["discount"]=>
          string(3) "-17"
          ["Status"]=>
          object(SimpleXMLElement)#27 (1) {
            [0]=>
            string(1) " "
          }
        }
        [2]=>
        object(SimpleXMLElement)#25 (3) {
          ["stone"]=>
          string(7) "SH04790"
          ["discount"]=>
          string(3) "-25"
          ["Status"]=>
          object(SimpleXMLElement)#28 (1) {
            [0]=>
            string(1) " "
          }
        }
      }
    }
    求解!谢谢!
      

  4.   

    好像nusoap.serv.php类,传参数都是用数组的
    服务端假如有两个参数($int,$xml)
    客户端直接传参(array('1','<?xml ... ?>'))就可以了
      

  5.   

    我也受此问题困扰!!跪求高手给解决一下!我的也是.net的服务器, 给出的第三个参数名为 Query
    <Query>xml</Query>
    传递参数时用
    $xml = simplexml_load_file('a.xml');
     "Query"=>$xml不报错,但服务器上接受不到内容郁闷了。如果把"Query"=>"" 就会报错