国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

一個.NET調(diào)用PHP Web Service的典型例子

開發(fā) 后端
最近一個項目由"WinForm直接訪問DB2"移植到"WinForm通過PHP Web Service來訪問DB2”。優(yōu)點是php可以架在Linux上,而Linux是免費的。這里將以這個.NET調(diào)用PHP Web Service為例子進行介紹。

最近一個項目由"WinForm直接訪問DB2"移植到"WinForm通過PHP Web Service來訪問DB2”。

這個命題的難點不是訪問DB2,而是.NET調(diào)用PHP Web Service。對于我這個長期作.NET,之前一直以為只有通過.NET調(diào)用PHP Web Service……的人來說,真是有點強“聰”所難了。

但是問題還是要解決的,期限就擺在眼前呢。經(jīng)過一番調(diào)查,終于有了眉目,現(xiàn)在分享給大家。

首先要說明的,PHP服務(wù)器需要至少需要兩個文件——一個WSDL文件和一個PHP文件。WSDL文件是一種機讀的XML文件,用于描述WebService提供的服務(wù)和調(diào)用方法(對于.NET則可以自動生成調(diào)用代碼,十分好用),php文件就是真正實現(xiàn)的WEB服務(wù)了。

1)PHP服務(wù)器端代碼

1-1)TestWebService.php代碼

  1. TestWebService.php  
  2. <?php  
  3. class TestWebService  
  4. {  
  5.     public function HelloWorld()  
  6.     {  
  7.         return array("HelloWorldResult"=>"Hello");  
  8.     }  
  9.  
  10.     public function GetArray($args)  
  11.         {  
  12.           /*  
  13.            注意,Web Service的方法在聲明時至多一個參數(shù),  
  14.             可是在調(diào)用該方法時就必須傳value1,value2兩個參數(shù)。  
  15.             (這一點十分令人費解,我的理解是,在調(diào)用該方法時,系統(tǒng)把所有參數(shù)都放到一個對象里傳過來的)  
  16.           */ 
  17.  
  18.         $value1 = $args->value1;    
  19.         $value2 = $args->value2;//這兩句是獲取真正的參數(shù)  
  20.    
  21.         $arry = array($value1,$value2);  
  22.  
  23.         //返回值也很特別,不是直接返回$arry,而是把它放到一個對象里再返回。  
  24.         return array("GetArrayResult"=>$arry);  
  25.     }  
  26. }  
  27. //創(chuàng)建WebSevice實例  
  28. $server = new SoapServer("TestWebService.wsdl");  
  29. //指定類名  
  30. $server->setClass("TestWebService");  
  31. $server->handle();  
  32. ?> 

1-2)TestWebService.wsdl代碼

  1. TestWebService.wsdl  
  2. <?xml version="1.0" encoding="utf-8"?> 
  3. <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://tempuri.org/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> 
  4.   <wsdl:types> 
  5.     <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/"> 
  6.       <s:element name="HelloWorld"> 
  7.         <s:complexType /> 
  8.       </s:element> 
  9.       <s:element name="HelloWorldResponse"> 
  10.         <s:complexType> 
  11.           <s:sequence> 
  12.             <s:element minOccurs="0" maxOccurs="1" name="HelloWorldResult" type="s:string" /> 
  13.           </s:sequence> 
  14.         </s:complexType> 
  15.       </s:element> 
  16.       <s:element name="GetArray"> 
  17.         <s:complexType> 
  18.           <s:sequence> 
  19.             <s:element minOccurs="0" maxOccurs="1" name="value1" type="s:string" /> 
  20.             <s:element minOccurs="0" maxOccurs="1" name="value2" type="s:string" /> 
  21.           </s:sequence> 
  22.         </s:complexType> 
  23.       </s:element> 
  24.       <s:element name="GetArrayResponse"> 
  25.         <s:complexType> 
  26.           <s:sequence> 
  27.             <s:element minOccurs="0" maxOccurs="1" name="GetArrayResult" type="tns:ArrayOfString" /> 
  28.           </s:sequence> 
  29.         </s:complexType> 
  30.       </s:element> 
  31.       <s:complexType name="ArrayOfString"> 
  32.         <s:sequence> 
  33.           <s:element minOccurs="0" maxOccurs="unbounded" name="string" nillable="true" type="s:string" /> 
  34.         </s:sequence> 
  35.       </s:complexType> 
  36.     </s:schema> 
  37.   </wsdl:types> 
  38.   <wsdl:message name="HelloWorldSoapIn"> 
  39.     <wsdl:part name="parameters" element="tns:HelloWorld" /> 
  40.   </wsdl:message> 
  41.   <wsdl:message name="HelloWorldSoapOut"> 
  42.     <wsdl:part name="parameters" element="tns:HelloWorldResponse" /> 
  43.   </wsdl:message> 
  44.   <wsdl:message name="GetArraySoapIn"> 
  45.     <wsdl:part name="parameters" element="tns:GetArray" /> 
  46.   </wsdl:message> 
  47.   <wsdl:message name="GetArraySoapOut"> 
  48.     <wsdl:part name="parameters" element="tns:GetArrayResponse" /> 
  49.   </wsdl:message> 
  50.   <wsdl:portType name="TestWebServiceSoap"> 
  51.     <wsdl:operation name="HelloWorld"> 
  52.       <wsdl:input message="tns:HelloWorldSoapIn" /> 
  53.       <wsdl:output message="tns:HelloWorldSoapOut" /> 
  54.     </wsdl:operation> 
  55.     <wsdl:operation name="GetArray"> 
  56.       <wsdl:input message="tns:GetArraySoapIn" /> 
  57.       <wsdl:output message="tns:GetArraySoapOut" /> 
  58.     </wsdl:operation> 
  59.   </wsdl:portType> 
  60.   <wsdl:binding name="TestWebServiceSoap" type="tns:TestWebServiceSoap"> 
  61.     <soap:binding transport="http://schemas.xmlsoap.org/soap/http" /> 
  62.     <wsdl:operation name="HelloWorld"> 
  63.       <soap:operation soapAction="http://tempuri.org/HelloWorld" style="document" /> 
  64.       <wsdl:input> 
  65.         <soap:body use="literal" /> 
  66.       </wsdl:input> 
  67.       <wsdl:output> 
  68.         <soap:body use="literal" /> 
  69.       </wsdl:output> 
  70.     </wsdl:operation> 
  71.     <wsdl:operation name="GetArray"> 
  72.       <soap:operation soapAction="http://tempuri.org/GetArray" style="document" /> 
  73.       <wsdl:input> 
  74.         <soap:body use="literal" /> 
  75.       </wsdl:input> 
  76.       <wsdl:output> 
  77.         <soap:body use="literal" /> 
  78.       </wsdl:output> 
  79.     </wsdl:operation> 
  80.   </wsdl:binding> 
  81.   <wsdl:binding name="TestWebServiceSoap12" type="tns:TestWebServiceSoap"> 
  82.     <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" /> 
  83.     <wsdl:operation name="HelloWorld"> 
  84.       <soap12:operation soapAction="http://tempuri.org/HelloWorld" style="document" /> 
  85.       <wsdl:input> 
  86.         <soap12:body use="literal" /> 
  87.       </wsdl:input> 
  88.       <wsdl:output> 
  89.         <soap12:body use="literal" /> 
  90.       </wsdl:output> 
  91.     </wsdl:operation> 
  92.     <wsdl:operation name="GetArray"> 
  93.       <soap12:operation soapAction="http://tempuri.org/GetArray" style="document" /> 
  94.       <wsdl:input> 
  95.         <soap12:body use="literal" /> 
  96.       </wsdl:input> 
  97.       <wsdl:output> 
  98.         <soap12:body use="literal" /> 
  99.       </wsdl:output> 
  100.     </wsdl:operation> 
  101.   </wsdl:binding> 
  102.   <wsdl:service name="TestWebService"> 
  103.     <wsdl:port name="TestWebServiceSoap" binding="tns:TestWebServiceSoap"> 
  104.       <soap:address location="http://localhost/phpmyadmin/ws/TestWebService.php" /> 
  105.     </wsdl:port> 
  106.     <wsdl:port name="TestWebServiceSoap12" binding="tns:TestWebServiceSoap12"> 
  107.       <soap12:address location="http://localhost/phpmyadmin/ws/TestWebService.php" /> 
  108.     </wsdl:port> 
  109.   </wsdl:service> 
  110. </wsdl:definitions> 

WSDL的代碼比較長,當(dāng)方法很多時,手敲代碼是不太可能的。有一個巧的辦法,就是也用.NET實現(xiàn)一個不含真正方法體的Web Serivce,然后通過http://***/TestWebService.asmx?wsdl的方法生成wsdl代碼文件。

關(guān)于WSDL文件,我要說明特別說明兩點:

(1)soap:address結(jié)點是聲明WebService的地址,在部署時要改成相應(yīng)地址;

(2)一維數(shù)組的聲明類型為ArrayOfType,字符串?dāng)?shù)組為ArrayOfString。如果Type不是簡單類型,則Type需要另外聲明。

2).NET客戶端代碼

先要添加Web引用,地址為WSDL文件的Http地址。

.NET調(diào)用PHP Web Service調(diào)用代碼(C#)

  1. //初始化WebService  
  2.         localhost.TestWebService srv = new localhost.TestWebService();  
  3.         //調(diào)***個方法  
  4.          string str = srv.HelloWorld();  
  5.         //調(diào)第二個方法  
  6.          string[] arrysrv.GetArray("string1","string2"); 

.NET調(diào)用PHP Web Service總結(jié):

(一)PHP是一種弱類型語言,檢查錯誤比較困難。array類型也與一般理解的數(shù)組不同,它也有類似Hashtable的用法。

(二)PHP Web Service方法的傳入?yún)?shù)、返回值都至多有一個,因為真正調(diào)用時的參數(shù)和返回值,都是包裝到一個對象中傳送的。

(三)PHP Web Service也支持自定義類型和自定義類型數(shù)組等復(fù)雜類型,但不支持多組數(shù)組。

(四)若返回值需要是多張二維表時,我淺薄的以為,可以傳化一組字符串?dāng)?shù)組傳送,格式為

[表1行數(shù)],[表1列數(shù)],[表1列名1],[表1列名2],……[表1列名N],[表1中按行列存放的值]

[表2行數(shù)],[表2列數(shù)],[表2列名1],[表2列名2],……[表2列名N],[表2中按行列存放的值]……

[表M行數(shù)],[表M列數(shù)],[表M列名1],[表M列名2],……[表M列名N],[表2中按行列存放的值]

按順序?qū)⑸厦鎇]中的內(nèi)容串成字符串?dāng)?shù)組,效率還不錯,我測試10000行240列的數(shù)據(jù),我有現(xiàn)成編解代碼,有興趣的可以向我索取.

【編輯推薦】

  1. PHP 5.3中的命名空間使用方法淺述
  2. PHP 5.3.0發(fā)布 新增命名空間等多項特性
  3. PHP的命名空間
  4. PHP 5.3閉包語法初探
  5. PHP 5.3新版特性淺析
責(zé)任編輯:彭凡 來源: cnblogs
相關(guān)推薦

2009-10-13 11:22:46

VB.NET調(diào)用Web

2009-10-29 11:26:28

VB.NET調(diào)用Web

2024-01-08 13:40:00

并發(fā)安全? 數(shù)量

2014-04-14 15:54:00

print()Web服務(wù)器

2009-07-14 16:02:42

JDBC例子

2015-10-08 08:53:46

PHP代碼片段

2012-11-29 09:49:17

軟件項目項目

2009-07-23 16:44:50

XML Web服務(wù)使用ASP.NET構(gòu)造

2009-12-11 18:05:39

PHP鏈接WEB SE

2009-10-13 10:21:58

VB.NET實現(xiàn)Web

2009-10-29 09:06:26

VB.NET Web

2009-10-13 09:33:49

VB.NET Web

2011-05-06 14:19:29

ExcelSQL Server

2020-03-26 17:00:53

HashMapputJava

2010-04-19 17:21:36

Oracle寫文件

2009-04-28 09:44:31

jQueryAjaxphp

2013-05-17 10:37:43

.NETWEB壓力測試WEB壓力測試工具

2022-10-19 11:31:49

TDD開發(fā)

2009-08-26 15:53:42

C#數(shù)據(jù)訪問XML

2009-07-27 17:32:39

Web ServiceASP.NET
點贊
收藏

51CTO技術(shù)棧公眾號

亚洲精品按摩视频| 视频一区二区三区国产 | 色久欧美在线视频观看| 亚洲精品久久久久久久蜜桃臀| 国产大片一区| 久久久久久久一区二区| 久久久久久久| 精品精品国产高清a毛片牛牛| 亚洲男人资源| 亚洲一区欧美一区| 久久久999视频| 成人黄色av电影| 国产盗摄视频在线观看| 黄网站免费久久| 影音先锋欧美资源| 麻豆精品国产91久久久久久| 日韩欧美第二区在线观看| 欧美午夜不卡| 久久国产一区二区| 99视频一区| 日本一区美女| 狠狠色综合日日| 国产 欧美 日本| 北条麻妃国产九九精品视频| 精品无码一区二区三区爱欲| 91色婷婷久久久久合中文| 欧美交换配乱吟粗大25p| 成人精品视频一区| 美女一区二区三区视频| 国产精品美女视频| 成人毛片高清视频观看| 亚洲欧美一区二区三区极速播放| 白浆爆出在线观看| 亚洲国产精品久久不卡毛片| 三级在线观看| 欧美一级国产精品| 亚洲美女炮图| 欧美成人三级视频网站| 日韩欧美ww| 成人午夜黄色影院| 夜夜嗨av一区二区三区网站四季av| 免费在线观看一区二区| 国产美女久久久久| 亚洲一区在线不卡| 色成人在线视频| 麻豆视频在线观看免费网站黄| 中文字幕亚洲专区| 亚洲高清极品| 极品校花啪啪激情久久| 国产suv一区二区三区88区| 欧美久久在线观看| 亚洲综合一二区| 久久黄色美女电影| 日韩最新中文字幕电影免费看| 欧洲亚洲视频| 国产精品一区二区欧美黑人喷潮水| 久久亚洲不卡| 成人免费xxxxx在线视频| 五月天视频一区| 91福利区在线观看| 国产69久久精品成人| 国产日本精品| 国产aaa一级片| 欧美日韩精品在线| 日韩精品三区| 91精品久久久久久久| 精品一区二区三区免费视频| 羞羞的视频免费| 欧美tk—视频vk| 台湾亚洲精品一区二区tv| 欧美不卡在线一区二区三区| 99国产精品久| 国产高清视频在线播放| 社区色欧美激情 | 国产大片一区| 久久久久久久久久久99| 欧美色播在线播放| 成人噜噜噜噜| 老牛影视免费一区二区| 国产精品三级久久久久三级| 丝袜在线观看| 国产精品国产亚洲伊人久久| 精品一区二区在线视频| 在线一区二区三区精品| 中文字幕日韩在线播放| 极品尤物久久久av免费看| 国产免费视频传媒| 欧美精品一区二区精品网| 精品国产aⅴ| 欧美日韩性生活片| 欧美精品三级日韩久久| 操欧美女人视频| 五月天av影院| 欧美日韩视频在线一区二区| 外国成人在线视频| 国产一区二区三区乱码| 7777精品伊人久久久大香线蕉 | 成年人视频在线免费观看| 欧美v国产在线一区二区三区| 亚洲视频国产精品| 一区二区三区四区五区视频| 精品美女久久久久久免费| 成人一区视频| 日韩电影免费观看高清完整| 婷婷六月综合网| 国产精品xxx在线观看| 91免费版看片| 精品国产乱码久久久久久1区2区| 中国精品18videos性欧美| 999sesese| 久久av中文字幕| 国产精品99久久久久久久vr | 色综合视频一区二区三区高清| av成人综合| 欧美视频在线观看视频| 亚洲精品在线观| 一区二区视频欧美| 午夜亚洲成人| 国产精品欧美久久久| 国产精品久久毛片av大全日韩| 欧美暴力调教| 日韩免费在线观看av| 欧美精品一区二区三区在线 | 麻豆一区二区在线观看| 精一区二区三区| www免费视频观看在线| 亚洲影院色无极综合| 午夜欧美大尺度福利影院在线看| 国产成人精品福利| 欧美日韩在线免费播放| 久久成人人人人精品欧| 91污在线观看| 高清一区二区| 日韩欧美黄色大片| 欧美精品久久久久久久免费观看 | 黑人精品一区| 国产精品久久成人免费观看| 日韩精品在线观看视频| 狠狠色丁香久久婷婷综合_中| av人人综合网| av影院在线播放| 国产亚洲欧洲高清一区| 久久电影国产免费久久电影| 欧美78videosex性欧美| 杨幂一区欧美专区| 国产亚洲欧洲黄色| 不卡av免费在线观看| 亚洲精品777| 四虎精品一区二区永久在线观看| 欧美黑人巨大精品一区二区| 国产精品国产自产拍高清av王其| 欧美精美视频| 粉嫩av在线播放| 图片区小说区区亚洲五月| 亚洲网址你懂得| 国产免费久久精品| 日韩免费av| 黄色网页在线免费观看| 亚洲免费在线精品一区| 亚洲天堂第一页| 国产精品伦一区| 日韩国产欧美一区二区| 免费黄色在线看| 超碰97在线看| 久久久久久国产精品久久| 亚洲国产精品一区二区久久恐怖片 | 亚洲欧美日韩中文播放| 日韩伦理视频| 26uuu亚洲电影在线观看| 日韩视频在线观看视频| 久久91亚洲精品中文字幕| 亚洲欧美日本韩国| 国内精品福利| 成人h在线观看| 三级黄色网址| 欧美性天天影院| 日韩小视频在线| 精品成人av一区| 国产一区二区不卡老阿姨| 视频小说一区二区| 日本不卡不卡| 国内外免费激情视频| 97netav| 精品国产一区二区三区四区在线观看 | 蜜桃视频在线观看网站| 吴梦梦av在线| 欧美亚洲国产视频| 欧美日韩1区2区| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 91丝袜国产在线播放| 精品国内自产拍在线观看视频| 国产精品一卡二卡三卡| 久久精品免费一区二区| 成人av影视在线| 另类色图亚洲色图| 欧美日韩高清一区二区三区| 国产亚洲欧美日韩日本| 亚洲一区二区三区免费在线观看| 国产区一区二| 视频在线观看入口黄最新永久免费国产 |