PHP与.NET的通信 [转]

近几天接到一个项目,要用的C#与PHP程序的通信,然后一直在想怎么实现这个功能。后来和朋友们一起讨论说他原来做过一个java和PHP通信的案例,然后就想到PHP与NET肯定也行得通的。当时他就使用的WebServices技术。

  然后马上就新建了一个c#的WebServices工程,然后最初写了一个很简单的案例:

  [WebMethod]

  public string HelloWorld()

  {

  return "Hello World";

  }

  就返回一个字符串格式的东西。然后去查阅PHP手册找到了soapClient这个函数,参数是WebServices工程的地址,$client=new SoapClient("http://192.168.10.208/HY_SIMS/HY_SIMS.asmx?WSDL");

  $h=$client->HelloWorld(); 这样h就接收到WebService中helloworld方法的返回值。 print_r($h);打印$h的结构得到的是这样的一个结构 stdClass Object ( [HelloWorldResult] => Hello World ) 分析这个结构,

  foreach ($h as $key=>$val)

  {

  echo $val;

  }

  这样就能得到其中 Hello World 这个字符串。

  很兴奋 哈,成功了,能够确信接收到.net程序的返回值。

  接下来实验接收返回的dataset数组,(因为WebService 只能返回dataset类型)

  $result=$client->ds();同样接收过来 print_r($result); 打印格式

  stdClass Object ( [dsResult] => stdClass Object ( [schema] => [any] => 1 2 3 ) )

  发现格式变了,变成这样的了,和上边字符串的格式有点不一样。然后试着同样用上边的方法解析出来。没成功。

  后来偶尔在网上看到这样的格式$videos=$result->getVideoListReturn->videos->contentId

  想到自己的这个对象类型也可以这样

  $n=$result->dsResult;

  将拿到的结果集找到下一层中的另外一个对象

  print_r($n);

  打印对象的格式

  echo "<br />";

  foreach ($n as $key=>$val)

  {

  echo $val;

  }

  尝试拆分获得结果 成功。

  然后思考,如果返回的在深一层,也就是外边在套一个,也可以同样解析出想要的结果。

  虽然今天语言组织的不怎样,呵呵,但这是加班好长时间的结果了2个小时,我一直在弄这个东西,就在找到下一层中困扰了一个多小时。其他的其实很简单的。

  希望这个能给大家带来帮助。下班吃饭去,然后休息了。

  嗯,回来接着写点:

  来接着分析怎么得到数据库中的数据,通过以上的分析得出

  stdClass Object ( [schema] => [any] => 1yang2long ) 一个这样的类类型的东西,那么我们查看页面源代码发现是一个XML的字符串

  stdClass Object

  (

  [schema] => <xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="NewDataSet"><xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"><xs:complexType><xs:choice minOccurs="0" maxOccurs="unbounded"><xs:element name="aa"><xs:complexType><xs:sequence><xs:element name="aid" type="xs:int" minOccurs="0"/><xs:element name="aname" type="xs:string" minOccurs="0"/></xs:sequence></xs:complexType></xs:element></xs:choice></xs:complexType></xs:element></xs:schema>

  [any] => <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"><NewDataSet xmlns=""><aa diffgr:id="aa1" msdata:rowOrder="0"><aid>1</aid><aname>yang</aname></aa><aa diffgr:id="aa2" msdata:rowOrder="1"><aid>2</aid><aname>long</aname></aa></NewDataSet></diffgr:diffgram>

  )

  ,simplexml_load_string();这个方法是PHP中加载XML格式的字符串,我们将上边这段字符串加载$c=$result->dsResult->any;

  $xml=simplexml_load_string($c);

  var_dump($xml);

  然后看看我们得到了什么:查看页面源代码

  object(SimpleXMLElement)#4 (1) {

  ["NewDataSet"]=>

  object(SimpleXMLElement)#5 (1) {

  ["aa"]=>

  array(2) {

  [0]=>

  object(SimpleXMLElement)#6 (2) {

  ["aid"]=>

  string(1) "1"

  ["aname"]=>

  string(4) "yang"

  }

  [1]=>

  object(SimpleXMLElement)#7 (2) {

  ["aid"]=>

  string(1) "2"

  ["aname"]=>

  string(4) "long"

  }

  }

  }

  }

  很规则的一段代码。然后我去查了手册

  $x=$xml->NewDataSet->aa;

  foreach($x as $key)

  {

  echo $key->aid."<br />";

  echo $key->aname."<br />";

  }

  这样就能遍历里边所有节点的数据了。同时我也得到了我想要的数据。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值