精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲欧洲国产视频| 神马午夜伦理影院| 国产偷人爽久久久久久老妇app | 少妇免费毛片久久久久久久久| 成人午夜淫片100集| 日韩在线二区| 亚洲第一天堂av| 精品999在线| gogo久久| 亚洲色图在线看| 精品视频在线观看| 国产乱码精品一区二区| 国产农村妇女精品一区二区| 久久成年人免费电影| 女尊高h男高潮呻吟| 亚洲国产伊人| 在线免费观看不卡av| 99在线观看视频免费| 伊人免费在线| 久久精品在线免费观看| 国产精品区二区三区日本| 最近中文字幕av| 在线视频精品| 色综合久久88| 日日操免费视频| 自拍偷拍精品| 精品处破学生在线二十三| 天天综合网久久| 欧美大片免费| 精品成人乱色一区二区| 奇米777四色影视在线看| 国产福利免费在线观看| 91亚洲永久精品| 99re资源| 国产视频在线免费观看| 蜜臀av性久久久久蜜臀av麻豆| 3344国产精品免费看| 久久精品女人毛片国产| 图片区亚洲欧美小说区| 伊人久久精品视频| 亚洲a v网站| 婷婷精品视频| 亚洲精品www久久久| 性感美女一区二区三区| 国产精品2区| 欧美丰满少妇xxxxx高潮对白| 国产xxxxx视频| 午夜激情在线播放| 欧美色xxxx| 欧美国产激情视频| 自拍视频在线看| 富二代精品短视频| av动漫在线看| 亚洲欧洲高清| 色综合久久久久综合| 人人妻人人添人人爽欧美一区| 日本一本在线免费福利| 一区二区三区中文免费| 欧美日韩中文字幕在线播放| 1024在线播放| 亚洲一区二三区| 六月婷婷激情综合| 草美女在线观看| 午夜伦欧美伦电影理论片| 福利在线一区二区| 午夜影视一区二区三区| 91激情五月电影| 男女视频在线看| 日韩三级成人| 欧美大片一区二区| 国产老熟女伦老熟妇露脸| 亚洲男人都懂第一日本| 亚洲最新中文字幕| 九九热最新地址| 亚洲黄色影院| 国产精品高潮呻吟久久av黑人| 一本色道久久综合亚洲| 韩国成人在线视频| 国产精品一区二区在线观看| 欧美91精品久久久久国产性生爱| 久久精品视频一区| 伊人久久av导航| 欧美日韩色网| 欧美午夜片在线免费观看| 啊啊啊国产视频| 久久久91麻豆精品国产一区| 精品免费视频.| 中国毛片在线观看| 91精品精品| 欧美一级视频免费在线观看| 一区二区视频免费| 成人午夜免费av| 日韩一区不卡| 午夜伦理大片视频在线观看| 粉嫩老牛aⅴ一区二区三区| 国产喷水theporn| 成人在线超碰| 综合欧美国产视频二区| 久久成人在线观看| 日本亚洲视频在线| 高清不卡一区二区三区| 韩国精品视频| 亚洲午夜精品在线| 亚洲 欧美 另类人妖| 国产亚洲成av人片在线观黄桃| 亚洲日本中文字幕| 久久精品www人人爽人人| 久久性色av| yy111111少妇影院日韩夜片| 高清av在线| 亚洲一区在线观看免费 | 国产精品亚洲一区二区三区妖精 | 久香视频在线观看| 夜夜嗨av一区二区三区中文字幕| 亚欧在线免费观看| 久久免费视频66| 久久精品国产一区二区电影| 国产免费一区二区三区四区五区| 国产ts人妖一区二区| 一道精品一区二区三区| 在线免费三级电影网站| 欧美精品一区二区三区四区| www.97视频| 天堂影院一区二区| 精品国产乱码久久久久久108| 成人免费在线| 欧美日本视频在线| 精品亚洲aⅴ无码一区二区三区| 日韩视频不卡| 国产高清自拍99| 最新av在线播放| 欧美另类videos死尸| 91资源在线播放| 男人天堂欧美日韩| 九9re精品视频在线观看re6| 日韩精品亚洲人成在线观看| 欧美一二三区在线| 日本中文在线视频| 精品亚洲porn| 在线视频一区观看| 欧洲精品久久久久毛片完整版| 亚洲欧洲在线视频| 人妻 日韩精品 中文字幕| av电影一区二区| 免费一级特黄毛片| 国产伦精品一区二区三区在线播放 | 精品1区2区3区4区| 国产精品视频免费观看| 美足av综合网| 亚洲精品成人av| 综合激情网五月| 91在线精品一区二区| 成人免费毛片网| 国产日产精品一区二区三区四区的观看方式 | 黄页网站免费观看| 国产a视频精品免费观看| 黄色一级视频播放| 日韩视频一二区| 欧美福利在线观看| 色香蕉在线视频| 欧美性xxxx在线播放| 91网站免费视频| 日韩不卡一区二区三区| 亚洲欧美日韩精品在线| 伊人久久一区| 欧美乱大交xxxxx另类电影| 亚洲xxxx天美| 黄色一区二区三区| 免费观看a级片| 激情综合五月婷婷| 欧美视频在线第一页| 台湾亚洲精品一区二区tv| 国产成人高潮免费观看精品| 日韩欧美小视频| 欧美电影精品一区二区| 全部毛片永久免费看| 国产日本亚洲高清| 亚洲精品mv在线观看| 最新国产乱人伦偷精品免费网站| 久久综合给合久久狠狠色| 国模一区二区| 欧美成人激情在线| 美丽的姑娘在线观看免费动漫| 欧美三级欧美一级| 久草网视频在线观看| 91色porny蝌蚪| 成人av毛片在线观看| 欧美日韩一区二区三区四区在线观看| 国产伦精品一区二区三区照片91| 欧美粗大gay| 欧美成人免费va影院高清| 五月天婷婷视频| 欧美亚洲国产一区二区三区va| av激情在线观看| 久久亚洲精精品中文字幕早川悠里 | 亚洲色图狂野欧美| 国产成人精品a视频| 欧美日韩国产色视频| 午夜国产小视频| 91麻豆福利精品推荐| 久久婷婷中文字幕| 久久国产日韩| 成人在线国产视频| 欧美顶级大胆免费视频| 国内精品**久久毛片app| 电影中文字幕一区二区| 日本三级韩国三级久久| 影音先锋中文在线视频| 国产亚洲精品美女| 亚洲黄色一级大片| 欧美日韩国产一级二级| 黄网在线观看视频| 亚洲综合色成人| а天堂中文在线资源| 久久噜噜亚洲综合| 大桥未久恸哭の女教师| 久久超碰97中文字幕| 国产精品无码专区av在线播放| 欧美精品日韩| 中国人体摄影一区二区三区| 天美av一区二区三区久久| 99中文字幕| 外国成人毛片| 国产精品揄拍500视频| 亚洲涩涩在线| 97精品一区二区视频在线观看| 制服丝袜在线播放| www.欧美精品| aⅴ在线视频男人的天堂| 亚洲精品中文字| 日本国产在线观看| 欧美成人一区二区三区片免费| 亚洲性在线观看| 91福利国产成人精品照片| 可以免费看的av毛片| 亚洲国产成人av网| 欧美日韩成人免费观看| 夜夜亚洲天天久久| 精品99久久久久成人网站免费| 亚洲欧美色综合| 午夜三级在线观看| 亚洲欧美激情一区二区| 国产精品精品软件男同| 国产精品电影院| 久久噜噜色综合一区二区| 国产精品美女www爽爽爽| 亚洲毛片亚洲毛片亚洲毛片| 久久久天堂av| 丁香花五月婷婷| 国产精品理论片| 亚洲国产123| 亚洲一区中文日韩| 日韩av黄色片| 欧美日韩中文字幕| 7799精品视频天天看| 色婷婷av一区二区三区gif| 一级片在线免费播放| 欧美日韩一区精品| 一级黄色免费片| 日韩一二三区视频| 人妻一区二区三区四区| 日韩精品极品视频免费观看| 黄色网址在线播放| 日韩亚洲欧美中文高清在线| 成人在线观看亚洲| 久久免费精品日本久久中文字幕| 涩涩网在线视频| 国产精品福利小视频| 高清国产一区二区三区四区五区| 99三级在线| 日韩精品免费一区二区夜夜嗨| 欧美精品一区二区三区在线看午夜 | 99视频在线看| 色婷婷久久一区二区三区麻豆| 奴色虐av一区二区三区| 在线成人小视频| 理论片中文字幕| 亚洲人成网在线播放| 秋霞午夜在线观看| 97视频在线免费观看| 日韩中文视频| 91在线短视频| 亚洲欧洲av| 精品无码av无码免费专区| 亚洲少妇在线| 天堂在线中文在线| fc2成人免费人成在线观看播放| 亚洲自拍偷拍图| 亚洲色图清纯唯美| 在线观看日韩中文字幕| 9191成人精品久久| 欧美视频综合| 欧美精品一二区| 欧美黑人疯狂性受xxxxx野外| 91情侣偷在线精品国产| 偷窥自拍亚洲色图精选| 在线成人性视频| 国产精品美女| 人妻换人妻仑乱| 久久久亚洲午夜电影| 全程偷拍露脸中年夫妇| 一本久道久久综合中文字幕 | 国产成人精品综合在线观看| 欧美色图亚洲激情| 亚洲精品老司机| 在线观看免费观看在线| 亚洲精品电影在线观看| 国产精品剧情一区二区在线观看| 欧美在线影院在线视频| jizz久久精品永久免费| 亚洲一区二区三区精品在线观看| 在线综合视频| 免费在线观看日韩av| 国产精品久久久久影院| 极品国产91在线网站| 亚洲精品狠狠操| 日本大片在线播放| 91午夜在线播放| 日韩一区自拍| 亚洲精品视频导航| 久久先锋影音av鲁色资源| 国产精品theporn动漫| 7777精品伊人久久久大香线蕉超级流畅 | 香蕉视频一区二区三区| 丁香婷婷综合激情| 九九久久精品视频| 9.1片黄在线观看| 色婷婷亚洲综合| 四虎成人免费在线| 97视频在线观看成人| 成人台湾亚洲精品一区二区| 最近免费观看高清韩国日本大全| 免费在线观看视频一区| av黄色在线免费观看| 黑人巨大精品欧美一区二区三区| 乱色精品无码一区二区国产盗| 久久视频免费观看| 成人在线日韩| 中国 免费 av| 国产美女娇喘av呻吟久久| 91精品国产闺蜜国产在线闺蜜| 欧美色视频在线观看| 91社区在线观看播放| 国产精品盗摄久久久| 欧美三级三级| 五月婷婷六月合| 国产精品久久久久影院| 91在线你懂的| 欧美乱大交xxxxx另类电影| 99a精品视频在线观看| 僵尸世界大战2 在线播放| heyzo一本久久综合| 麻豆久久久久久久久久| 亚洲欧美资源在线| 无人区在线高清完整免费版 一区二| 视频一区二区综合| 久久激五月天综合精品| 内射一区二区三区| 精品粉嫩aⅴ一区二区三区四区| segui88久久综合9999| 久久www免费人成精品| 免费中文字幕日韩欧美| 亚洲一级黄色录像| 欧美日韩aaa| 欧美寡妇性猛交xxx免费| 国产精品一区免费观看| 久久午夜激情| xxxx日本少妇| 日韩电影免费观看中文字幕 | 国产精品白丝jk白祙| 日韩亚洲精品在线| 99久久久无码国产精品衣服| 欧美日韩国产综合一区二区| 欧美家庭影院| 欧美日本亚洲| 麻豆高清免费国产一区| 国产97免费视频| 亚洲精品国产拍免费91在线| 综合在线影院| 51xx午夜影福利| 91在线观看视频| 亚洲视频在线免费播放| 欧美日本国产在线| 教室别恋欧美无删减版| 在线观看免费视频污| 精品久久久一区| 日韩子在线观看| 久久99热只有频精品91密拍| 免费成人在线观看视频| 国产在线视频99| 中文字幕欧美日韩| 风间由美性色一区二区三区四区| 妺妺窝人体色www在线观看| 伊人开心综合网| 国产三级在线免费观看| 999国产在线| 青青草一区二区三区| 日韩欧美中文字幕一区二区| 中国日韩欧美久久久久久久久| 精品亚洲自拍|