精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C# WebService調用的三大難題

開發 后端
本文向您介紹C++與C#互相通信,C# WebService調用的三個難點。用C#編寫客戶端時,只需要將WebService添加到引用,就能像調用本地方法一樣去C# WebService調用。

一、用C#實現WebService是相當簡單的事情,我們只要創建一個Web服務程序,在方法名上面加上[WebMethod],部署到IIS上,就能像訪問Web站點一樣訪問WebService。

用C#編寫客戶端時,只需要將WebService添加到引用,就能像調用本地方法一樣去C# WebService調用。像這樣的例子也比比皆是,在這就不多講。

二、用C++實現WebService,一般會用到gsoap,具體方法見:http://www.cppblog.com/qiujian5628/archive/2008/06/19/54019.html

三、當做完了這些之后,并不代表WebService就能相互通訊了,現在我簡單列舉一下問題:

1、C#提供的WebService的URL一般形如:http://localhost/WebService.asmx,但是,C++能提供的只能是:http://localhost/。C++做客戶端的時候調用沒有問題,但是當C#做客戶端的時候,引用C++提供的RUL時,會提示沒用執行方法(HTTP GET method not implemented)。做C#開發的大部分會認為C++方提供的不是WebService,或者說提供的WebService根本就不全,都不帶.asmx文件。做C++開發的會認為他傳輸的數據符合soap協議,靠http傳輸數據,他就是WebService。

2、當我們解決了第一步后,緊接著會發現另外一個問題。當我們需要傳輸自定義數據類型時(在C++中稱結構體,在C#中稱實體),從C++返回的信息中,C#無法構建出實體類。

3、當傳輸的信息中帶有中文字符時,亂碼滿天飛。

四、為了解決這些問題,我們先簡單了解一下WebService。

Web Service互操作協議棧:

〈A〉、服務發現 (UDDI)

〈B〉、服務描述(WSDL)

〈C〉、服務調用(SOAP)

〈D〉、消息編碼 (XML)

〈E〉、傳輸網絡層(HTTP, TCP/IP)

其中WSDL描述WebService都有什么方法、方法有什么參數,什么返回值等。SOAP(簡單對象訪問協議(Simple Object Access Protocol)是一種輕量的、簡單的、基于XML的協議。傳輸的數據就需要遵循這個協議。我比較簡單得認為傳輸的數據需要遵循這種格式。

借用微軟的這個圖描述下WebService的調用過程:

C# WebService調用

五、開始解決問題。作為.NET開發人員,我們根本就接觸不到底層的東西,全被封裝了。

C++做的確實是WebService,只是他們需要給提供一個描述文檔,即.WSDL文件。使用.NET提供的wsdl.exe工具,使用命令:wsdl /o: c:\webservice.cs c:\webservice.wsdl。通過webservice.wsdl文檔,生成代理類,將代理類寫入webservice.cs文件中。我們拷貝這個cs文件到項目中,將URL指向http://localhost/,就能像以往那樣使用WebService了。

當出現無法傳遞復雜類型數據時,是因為使用gsoap生成的wsdl文件與.Net中生成的wsdl文件不一樣。具體代碼如下:

  1. 〈!--operationresponseelement--〉  
  2. 〈elementname="result"〉  
  3. 〈complexType〉  
  4. sequence〉  
  5. 〈elementname="a"type="xsd:int" 
  6. minOccurs="1"maxOccurs="1"/〉  
  7. 〈elementname="b"type="xsd:int" 
  8. minOccurs="1"maxOccurs="1"/〉  
  9. 〈/sequence〉  
  10. 〈/complexType〉  
  11. 〈/element〉  
  12. 以上為gsoap生成的。返回實體result,  
  13. 實體有兩個屬性:a,b。  
  14. 〈s:elementname="TestResponse"〉  
  15. 〈s:complexType〉  
  16. 〈s:sequence〉  
  17. 〈s:elementminOccurs="0"maxOccurs="1" 
  18. name="TestResult"type="tns:result"/〉  
  19. 〈/s:sequence〉  
  20. 〈/s:complexType〉  
  21. 〈/s:element〉  
  22. 〈s:complexTypename="result"〉  
  23. 〈s:sequence〉  
  24. 〈s:elementminOccurs="1"maxOccurs="1" 
  25. name="a"type="s:int"/〉  
  26. 〈s:elementminOccurs="1"maxOccurs="1" 
  27. name="b"type="s:int"/〉  
  28. 〈/s:sequence〉  
  29. 〈/s:complexType〉  
  30. 以上是.NET生成的。  
  31.  
  32. 在下面的文件中,多出  
  33. 〈s:elementname="TestResponse"〉  
  34. 〈s:complexType〉  
  35. 〈s:sequence〉  
  36. 〈s:elementminOccurs="0"maxOccurs="1" 
  37. name="TestResult"type="tns:result"/〉  
  38. 〈/s:sequence〉  
  39. 〈/s:complexType〉  
  40. 〈/s:element〉  
  41.  

這個便是.NET中用來構造實體的。當我們出現情況4.2時,gsoap中盡量使用.NET生成的wsdl文檔,生成.h文件,以避免C++中的結構無法在C#中轉換成實體。

第三個問題,我們是通過將中文轉換成16進制后傳輸過來,然后再轉換成中文。下面提供C#轉換的代碼:

  1. ///〈 summary 〉  
  2. ///從16進制轉換成漢字  
  3. ///〈 /summary 〉  
  4. ///〈 paramname="hex" 〉〈 /param 〉  
  5. ///〈 returns 〉〈 /returns 〉  
  6. publicstaticstringGetChsFromHex(stringhex)  
  7. {  
  8. if(hex==null)  
  9. thrownewArgumentNullException("hex");  
  10. if(hex.Length%2!=0)  
  11. {  
  12. hex+="20";//空格  
  13. //thrownewArgumentException  
  14. ("hexisnotavalidnumber!","hex");  
  15. }  
  16. //需要將hex轉換成byte數組。  
  17. byte[]bytes=newbyte[hex.Length/2];  
  18.  
  19. for(inti=0;i〈 bytes.Length;i++)  
  20. {  
  21. try  
  22. {  
  23. //每兩個字符是一個byte。  
  24. bytes[i]=byte.Parse(hex.Substring(i*2,2),  
  25. System.Globalization.NumberStyles.HexNumber);  
  26. }  
  27. catch  
  28. {  
  29. //Rethrowanexceptionwithcustommessage.  
  30. thrownewArgumentException("  
  31. hexisnotavalidhexnumber!","hex");  
  32. }  
  33. }  
  34.  
  35. //獲得GB2312,ChineseSimplified。  
  36. System.Text.Encodingchs=System.Text.Encoding.  
  37. GetEncoding("gb2312");  
  38. returnchs.GetString(bytes);  
  39. }  
  40.  
  41. ///〈 summary 〉  
  42. ///從漢字轉換到16進制  
  43. ///〈 /summary 〉  
  44. ///〈 paramname="s" 〉〈 /param 〉  
  45. ///〈 returns 〉〈 /returns 〉  
  46. publicstaticstringGetHexFromChs(strings)  
  47. {  
  48. if((s.Length%2)!=0)  
  49. {  
  50. s+="";//空格  
  51. //thrownewArgumentException("  
  52. sisnotvalidchinesestring!");  
  53. }  
  54.  
  55. System.Text.Encodingchs=System.Text.  
  56. Encoding.GetEncoding("gb2312");  
  57.  
  58. byte[]bytes=chs.GetBytes(s);  
  59. stringstr="";  
  60. for(inti=0;i〈 bytes.Length;i++)  
  61. {  
  62. str+=string.Format("{0:X}",bytes[i]);  
  63. }  
  64. returnstr;  
  65. }  

注:以上來轉換代碼源于網絡,C++中轉換的代碼也可以在網上找到,C++與C# WebService調用經過以上的步驟就能基本實現。

三大難題到此結束,其實在整個過程中還有個最大的難題,那就是人與人的交流。因為一方使用C++,一方使用C#,語言不同,各自想問題的方式也不一樣,所以需要相互理解,相互站在對方的角度想問題。多交流、多溝通才是解決問題之道。請不要抱怨C#弱智,也請不要怪C++繁瑣,語言既然存在則有他的價值。

【編輯推薦】

  1. C# WebService發布與調用淺析
  2. 簡明教程 C# Webservice實例
  3. C#中定義裝箱和拆箱詳解
  4. 淺談C#類型系統
  5. 三種不同的C#異常類型
責任編輯:冰荷 來源: cnblogs
相關推薦

2021-08-13 11:30:07

大數據數據分析據中心

2012-04-25 15:57:57

Android

2018-07-20 14:41:15

數據中心遷移管理運維

2011-07-25 10:42:47

2009-10-29 09:32:51

寬帶接入網

2021-03-10 11:11:44

混合云IT云數據

2021-03-01 19:20:32

多云IT架構

2018-04-25 15:50:50

2009-08-06 17:57:14

C# webServiC# WebServi

2015-07-09 10:44:48

C#WebService

2009-08-11 14:26:56

C#動態調用WebSe

2012-05-21 09:27:53

2010-05-28 14:38:36

2018-10-31 11:17:55

程序員女朋友面試

2020-09-04 15:07:54

網絡威脅情報CTI網絡攻擊

2010-12-22 17:10:34

2012-04-11 11:36:38

庫克

2010-06-22 09:43:25

數據中心的集中化管理

2022-03-01 14:12:22

區塊鏈技術安全

2013-01-21 10:46:34

公有云IaaS云計算
點贊
收藏

51CTO技術棧公眾號

亚洲国产另类 国产精品国产免费| 成人免费小视频| 久久免费高清视频| 中国毛片在线观看| 欧洲精品久久久久毛片完整版| 欧美freesex交免费视频| 91精品国产91久久久久久最新毛片| 大桥未久一区二区| 四虎免费在线观看| 视频一区二区中文字幕| 大量国产精品视频| aa一级黄色片| 久久伊人久久| 91福利视频在线| 国产又粗又猛又爽又黄的网站| 日韩资源在线| 国产传媒欧美日韩成人| 国产成人拍精品视频午夜网站 | 国产黄色激情视频| 亚洲人视频在线观看| 精品一区二区三区在线播放视频| 性欧美激情精品| 亚洲综合视频网站| 免费观看不卡av| 欧美成人综合网站| 久久精品影视大全| 亚洲插插视频| 亚洲一区二区欧美| 宅男噜噜99国产精品观看免费| 天天干天天做天天操| 韩国三级在线一区| 国产色视频一区| 国产中文字幕视频| 亚洲精品孕妇| 欧美激情在线视频二区| 久艹在线观看视频| heyzo久久| 亚洲一级免费视频| 日本一区二区三区网站| ccyy激情综合| 精品久久久久久久人人人人传媒| 色婷婷.com| 日日夜夜天天综合| 色综合中文字幕| 人妻av中文系列| 黑人精品视频| 一区二区三区日韩在线观看| 美国av在线播放| 在线看黄色av| 国产精品国产精品国产专区不片| 日韩福利影院| a天堂在线资源| 欧美国产欧美综合| 日本一区二区三区四区高清视频| 视频一区二区三区在线看免费看| fc2成人免费人成在线观看播放| www.成人av.com| 国产成人精品亚洲精品色欲| 国产在线精品一区二区| 成人欧美在线观看| 国产绳艺sm调教室论坛| 国产综合成人久久大片91| 国产日产欧美a一级在线| 中文字幕第31页| 久久爱www久久做| 91嫩草在线视频| a级片在线播放| 国产成人av资源| 国产精品制服诱惑| 天堂av在线免费观看| 久久一区二区三区四区| 亚洲高清乱码| 国产精品实拍| 亚洲国产成人91porn| 成人综合视频在线| 亚洲精品.com| 91精品麻豆日日躁夜夜躁| 日本高清免费观看| 极品国产人妖chinesets亚洲人妖| 日韩av在线免费观看| 少妇精品一区二区三区| 成人在线国产| 久99久在线视频| 天天操夜夜操视频| 美女视频黄免费的久久| 亚洲影院高清在线| 人成免费电影一二三区在线观看| 欧美国产一区二区在线观看| 欧美少妇一区二区三区| 国产在线美女| 欧美三日本三级三级在线播放| 午夜激情视频网| 欧美高清视频看片在线观看 | 97se在线视频| 天天干天天操av| 国产精品入口麻豆九色| 人妻av无码专区| 日本一区二区三区视频在线| 日韩女优av电影在线观看| 男男做爰猛烈叫床爽爽小说 | www.日韩欧美| 国产一级片网址| 日本vs亚洲vs韩国一区三区| 91情侣在线视频| 九九在线视频| 一区二区三区在线观看视频| 男人操女人免费| 久久久久毛片免费观看| 亚洲欧洲在线播放| 国产一级一级片| 美女视频免费一区| 九色91在线视频| v片在线观看| 在线欧美小视频| 超碰caoprom| 888久久久| 国产精品久久久久久一区二区 | 久久久国产精品入口麻豆| 亚洲欧美国产日韩天堂区| 欧美黄色免费看| 青青草一区二区三区| 激情一区二区三区| 青草在线视频在线观看| 欧美日韩精品一区二区三区| 亚洲午夜久久久久久久久红桃| 欧美视频一区| 91精品一区二区| 国产特黄在线| 欧美视频中文字幕在线| 国产人妖在线观看| 91精品推荐| 国产日韩av在线播放| 黄色小视频在线观看| 欧美日韩精品在线视频| 亚洲乱妇老熟女爽到高潮的片| 999久久久免费精品国产| 国产91精品最新在线播放| 手机看片1024国产| 亚洲v日本v欧美v久久精品| 先锋资源在线视频| 这里只有精品在线| 成人伊人精品色xxxx视频| www.久久热.com| 在线亚洲人成电影网站色www| 国产成人av无码精品| 红桃视频国产精品| 国产精品美女xx| 国产丝袜精品丝袜| 亚洲高清av在线| 久久中国妇女中文字幕| 在线观看福利一区| 久久久久毛片| 色爱精品视频一区| 中文在线字幕免费观| 国产女同互慰高潮91漫画| 麻豆av免费在线| 国产亚洲电影| 国产精品入口福利| 色综合久久久久综合一本到桃花网| 欧美性欧美巨大黑白大战| 欧美丰满美乳xxⅹ高潮www| 日本欧美大码aⅴ在线播放| 日韩欧美亚洲日产国产| 成人黄色视屏网站| 日韩视频一区在线| 国产福利资源在线| 亚洲成a人v欧美综合天堂下载| 国产伦精品一区三区精东| 中文久久精品| 色一情一区二区三区四区| 日韩在线你懂得| 欧美激情精品久久久久久久变态 | 久久精品国产99久久6| 艳色歌舞团一区二区三区| 国产美女精品视频免费播放软件| 欧美美女操人视频| 神马久久久久久久久久| 欧美在线观看视频一区二区 | 成年人视频在线观看免费| 欧美三级电影网| 久草免费在线视频观看| 91在线视频免费91| 中国黄色片免费看| 国产精品xvideos88| 免费看污久久久| 91国产精品| 91国自产精品中文字幕亚洲| 国产黄在线看| 精品奇米国产一区二区三区| 性色av免费观看| 综合久久久久久| 亚洲熟女乱综合一区二区三区| 日产国产高清一区二区三区| 激情五月六月婷婷| 国模精品一区| 国产成人看片| 国产麻豆一区| 欧美一级高清免费播放| 欧美jizz18hd性欧美| 日韩电影在线观看中文字幕| 中文字幕制服诱惑| 亚洲国产成人精品视频| 蜜桃av免费观看| 99精品黄色片免费大全| 亚洲高清视频免费| 性欧美精品高清| 日韩精品一区二区免费| 欧美丝袜一区| 久久久久资源| 亚洲不卡在线| 国产精品一区专区欧美日韩| 九色porny自拍视频在线播放 | 亚洲综合影视| 亚洲午夜激情免费视频| 欧美 中文字幕| 欧美电影在线免费观看| 91精品国产综合久久久蜜臀九色| 尤物视频一区二区| 99热这里只有精品4| 久久影视一区二区| 无码成人精品区在线观看| 狠狠色综合色综合网络| 欧美黄色一级片视频| 亚洲国产精品一区| 日本一道在线观看| 91综合视频| 色视频一区二区三区| 亚洲男人都懂第一日本| 国内精品久久国产| 91成人精品在线| 97久久夜色精品国产九色| 农村妇女一区二区| 国产精品久久久久免费a∨| 性欧美又大又长又硬| 97视频免费在线观看| 国产乱码在线| 欧美黑人又粗大| 日韩专区av| 欧美美最猛性xxxxxx| a视频在线免费看| 久久久97精品| 国产二区三区在线| 久久伊人精品视频| 国产精品刘玥久久一区| 久久躁日日躁aaaaxxxx| 免费日本一区二区三区视频| 中文字幕无线精品亚洲乱码一区| 二区在线视频| 自拍偷拍亚洲欧美| 午夜视频成人| 精品国产一区久久久| 快射av在线播放一区| 久久精彩免费视频| 大地资源网3页在线观看| 久久成人18免费网站| 1区2区3区在线视频| 欧美激情欧美激情在线五月| 欧美v亚洲v| 97国产在线观看| 亚洲校园激情春色| 国产精品白嫩美女在线观看| 经典三级一区二区| 国产视频999| 亚洲天堂中文字幕在线观看| 国产精品v欧美精品v日韩| 久久夜色电影| 欧美人xxxxx| 日韩成人三级| 永久免费看av| 亚洲精品影院在线观看| www.日日操| 国内成+人亚洲+欧美+综合在线| 亚洲综合123| www.日韩av| 亚洲人成人无码网www国产 | 亚洲美女性视频| 搞黄视频免费在线观看| 久久精品国产精品| av影院在线免费观看| 国产a级全部精品| 欧美一区=区三区| 国产高清一区视频| 国产影视一区| 亚洲黄色网址在线观看| 妖精视频成人观看www| 少妇一级淫免费放| 国产宾馆实践打屁股91| 国产精品一二三区在线观看| 自拍偷拍国产精品| 人人干人人干人人干| 欧美视频一区二区| 隣の若妻さん波多野结衣| 亚洲欧美在线x视频| 成人三级网址| 国产a∨精品一区二区三区不卡| www一区二区三区| 欧美另类网站| 欧美视频官网| 亚洲国产日韩欧美在线观看| 不卡电影一区二区三区| 国产免费嫩草影院| 欧美日韩亚洲一区二| 国产精品无码一区二区桃花视频| 日韩大片在线观看视频| 国产原创精品视频| 日韩美女免费线视频| 一区视频网站| 一区二区三区四区| 男人的天堂亚洲| 久久精品无码专区| 亚洲欧美在线另类| 无码人妻av免费一区二区三区| 欧美一级视频精品观看| 粉嫩av在线播放| 2020久久国产精品| 国产成人高清精品免费5388| 欧美日韩视频免费在线观看| 日日嗨av一区二区三区四区| 国模无码视频一区| 亚洲综合999| 国产又大又长又粗| 中文字幕久久久av一区| 蜜桃av在线| 国产精品久久国产三级国电话系列| 色喇叭免费久久综合| 国产又黄又猛视频| 99国产精品视频免费观看| 美女视频黄免费| 欧美一卡2卡三卡4卡5免费| 三区四区在线视频| 国产精品久久久久久久久久久久久| 青青一区二区| 青草青青在线视频| 国产99一区视频免费| 久草视频手机在线| 69久久99精品久久久久婷婷| 东凛在线观看| 国产精品18久久久久久首页狼| 日韩理论电影中文字幕| www国产精品内射老熟女| 成人国产一区二区三区精品| 久久久久久激情| 日韩欧美一级二级| 四虎影视成人| 国产精品国产精品| 精久久久久久| 日本不卡视频一区| 午夜国产不卡在线观看视频| 免费看黄网站在线观看| 国a精品视频大全| 久久九九热re6这里有精品| 久久久久久久久久久99| 91麻豆swag| www.色国产| 尤物九九久久国产精品的特点| 97成人超碰| 男同互操gay射视频在线看| 国产一区二区不卡| 精品少妇一二三区| 日韩av中文字幕在线播放| 中文字幕在线高清| 日韩在线导航| 韩国av一区二区三区在线观看| 青青草手机视频在线观看| 欧美v亚洲v综合ⅴ国产v| 成年网站在线视频网站| 精品国产免费人成电影在线观...| 在线亚洲免费| 免费看黄色三级| 88在线观看91蜜桃国自产| 欧美xxxx性xxxxx高清| 蜜桃av色综合| 久久草av在线| 国产精品1000| 在线视频欧美日韩| 久久av网站| 欧美女人性生活视频| 国产精品视频免费看| 99精品在线视频观看| 97精品欧美一区二区三区| 久操成人av| 国产又黄又猛的视频| 亚洲国产精品久久艾草纯爱| 邻居大乳一区二区三区| 91久久精品美女高潮| 亚洲美女91| 精品熟妇无码av免费久久| 日韩一区二区三区在线| 自拍视频在线看| 二级片在线观看| 久久婷婷久久一区二区三区| 国产精品国产三级国产普通话对白| 久久久久成人精品| 精品国产一区二区三区| 无码人妻一区二区三区一| 91福利在线免费观看| 青草在线视频在线观看| 亚洲精美视频| 97se亚洲国产综合自在线不卡| 一区二区三区免费观看视频|