国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C# 動態調用WebService

2019-11-17 03:06:44
字體:
來源:轉載
供稿:網友
C# 動態調用WebService

動態調用webservice,就可以不用添加web引用了,上線的話也只是需要改一下wsdl地址就可以了1.動態調用的方法:

C#代碼收藏代碼
  1. ///<summary>
  2. ///動態webservice調用
  3. ///</summary>
  4. ///<returns>string</returns>
  5. publicstringwsTest()
  6. {
  7. stringurl="http://localhost:8080/myWebserviceTest/services/myServices?wsdl";//wsdl地址
  8. stringname="wsTest";//javaWebService開放的接口
  9. WebService
  10. stringsuc=(string)wsd.ExecuteQuery(name,str);
  11. returnsuc;
  12. }

2.動態調用具體類:

C#代碼收藏代碼
  1. usingSystem;
  2. usingSystem.Collections;
  3. usingSystem.ComponentModel;
  4. usingSystem.Data;
  5. usingSystem.Linq;
  6. usingSystem.Web;
  7. usingSystem.Web.Services;
  8. usingSystem.Web.Services.Protocols;
  9. usingSystem.xml.Linq;
  10. usingSystem.IO;
  11. usingSystem.Net;
  12. usingSystem.CodeDom;
  13. usingSystem.CodeDom.Compiler;
  14. usingSystem.Web.Services.Descr
  15. [WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
  16. [ToolboxItem(false)]
  17. //若要允許使用asp.netAjax從腳本中調用此Web服務,請取消對下行的注釋。
  18. //[System.Web.Script.Services.ScriptService]
  19. publicclassWebServiceProxy:System.Web.Services.WebService
  20. {
  21. #region私有變量和屬性定義
  22. ///<summary>
  23. ///web服務地址
  24. ///</summary>
  25. privatestring_wsdlUrl=string.Empty;
  26. ///<summary>
  27. ///web服務名稱
  28. ///</summary>
  29. privatestring_wsdlName=string.Empty;
  30. ///<summary>
  31. ///代理類命名空間
  32. ///</summary>
  33. privatestring_wsdlNamespace="FrameWork.WebService.DynamicWebServiceCalling.{0}";
  34. ///<summary>
  35. ///代理類類型名稱
  36. ///</summary>
  37. privateType_typeName=null;
  38. ///<summary>
  39. ///程序集名稱
  40. ///</summary>
  41. privatestring_assName=string.Empty;
  42. ///<summary>
  43. ///代理類所在程序集路徑
  44. ///</summary>
  45. privatestring_assPath=string.Empty;
  46. ///<summary>
  47. ///代理類的實例
  48. ///</summary>
  49. privateobject_instance=null;
  50. ///<summary>
  51. ///代理類的實例
  52. ///</summary>
  53. privateobjectInstance
  54. {
  55. get
  56. {
  57. if(_instance==null)
  58. {
  59. _instance=Activator.CreateInstance(_typeName);
  60. return_instance;
  61. }
  62. else
  63. return_instance;
  64. }
  65. }
  66. #endregion
  67. #region構造函數
  68. publicWebServiceProxy(stringwsdlUrl)
  69. {
  70. this._wsdlUrl=wsdlUrl;
  71. stringwsdlName=WebServiceProxy.getWsclassName(wsdlUrl);
  72. this._wsdlName=wsdlName;
  73. this._assName=string.Format(_wsdlNamespace,wsdlName);
  74. this._assPath=Path.GetTempPath()+this._assName+getmd5Sum(this._wsdlUrl)+".dll";
  75. this.CreateServiceAssembly();
  76. }
  77. publicWebServiceProxy(stringwsdlUrl,stringwsdlName)
  78. {
  79. this._wsdlUrl=wsdlUrl;
  80. this._wsdlName=wsdlName;
  81. this._assName=string.Format(_wsdlNamespace,wsdlName);
  82. this._assPath=Path.GetTempPath()+this._assName+getMd5Sum(this._wsdlUrl)+".dll";
  83. this.CreateServiceAssembly();
  84. }
  85. #endregion
  86. #region得到WSDL信息,生成本地代理類并編譯為DLL,構造函數調用,類生成時加載
  87. ///<summary>
  88. ///得到WSDL信息,生成本地代理類并編譯為DLL
  89. ///</summary>
  90. privatevoidCreateServiceAssembly()
  91. {
  92. if(this.checkCache())
  93. {
  94. this.initTypeName();
  95. return;
  96. }
  97. if(string.IsNullOrEmpty(this._wsdlUrl))
  98. {
  99. return;
  100. }
  101. try
  102. {
  103. //使用WebClient下載WSDL信息
  104. WebClientweb=newWebClient();
  105. Streamstream=web.OpenRead(this._wsdlUrl);
  106. ServiceDescriptiondescription=ServiceDescription.Read(stream);//創建和格式化WSDL文檔
  107. ServiceDescriptionImporterimporter=newServiceDescriptionImporter();//創建客戶端代理代理類
  108. importer.ProtocolName="Soap";
  109. importer.Style=ServiceDescriptionImportStyle.Client;//生成客戶端代理
  110. importer.CodeGenerationOptions=CodeGenerationOptions.GenerateProperties|CodeGenerationOptions.GenerateNewAsync;
  111. importer.AddServiceDescription(description,null,null);//添加WSDL文檔
  112. //使用CodeDom編譯客戶端代理類
  113. CodeNamespacenmspace=newCodeNamespace(_assName);//為代理類添加命名空間
  114. CodeCompileUnitunit=newCodeCompileUnit();
  115. unit.Namespaces.Add(nmspace);
  116. this.checkForImports(this._wsdlUrl,importer);
  117. ServiceDescriptionImportWarningswarning=importer.Import(nmspace,unit);
  118. CodeDomProviderprovider=CodeDomProvider.CreateProvider("CSharp");
  119. CompilerParametersparameter=newCompilerParameters();
  120. parameter.ReferencedAssemblies.Add("System.dll");
  121. parameter.ReferencedAssemblies.Add("System.XML.dll");
  122. parameter.ReferencedAssemblies.Add("System.Web.Services.dll");
  123. parameter.ReferencedAssemblies.Add("System.Data.dll");
  124. parameter.GenerateExecutable=false;
  125. parameter.GenerateInMemory=false;
  126. parameter.IncludeDebugInformation=false;
  127. CompilerResultsresult=provider.CompileAssemblyFromDom(parameter,unit);
  128. provider.Dispose();
  129. if(result.Errors.HasErrors)
  130. {
  131. stringerrors=string.Format(@"編譯錯誤:{0}錯誤!",result.Errors.Count);
  132. foreach(CompilerErrorerrorinresult.Errors)
  133. {
  134. errors+=error.ErrorText;
  135. }
  136. thrownewException(errors);
  137. }
  138. this.copyTempAssembly(result.PathToAssembly);
  139. this.initTypeName();
  140. }
  141. catch(Exceptione)
  142. {
  143. thrownewException(e.Message);
  144. }
  145. }
  146. #endregion
  147. #region執行Web服務方法
  148. ///<summary>
  149. ///執行代理類指定方法,有返回值
  150. ///</summary>
  151. ///<paramname="methodName">方法名稱</param>
  152. ///<paramname="param">參數</param>
  153. ///<returns>object</returns>
  154. publicobjectExecuteQuery(stringmethodName,object[]param)
  155. {
  156. objectrtnObj=null;
  157. string[]args=newstring[2];
  158. List<string>list=newList<string>();
  159. List<string>list1=newList<string>();
  160. List<string>list2=newList<string>();
  161. object[]obj=newobject[3];
  162. try
  163. {
  164. if(this._typeName==null)
  165. {
  166. //記錄Web服務訪問類名錯誤日志代碼位置
  167. thrownewTypeLoadException("Web服務訪問類名【"+this._wsdlName+"】不正確,請檢查!");
  168. }
  169. //調用方法
  170. MethodInfomi=this._typeName.GetMethod(methodName);
  171. if(mi==null)
  172. {
  173. //記錄Web服務方法名錯誤日志代碼位置
  174. thrownewTypeLoadException("Web服務訪問方法名【"+methodName+"】不正確,請檢查!");
  175. }
  176. try
  177. {
  178. if(param==null)
  179. rtnObj=mi.Invoke(Instance,null);
  180. else{
  181. list.Add("Hello");
  182. list.Add("WebService");
  183. list.Add("!");
  184. list1.Add("I");
  185. list1.Add("am");
  186. list1.Add("test");
  187. list2.Add("do");
  188. list2.Add("it");
  189. list2.Add("now");
  190. obj[0]=list;
  191. obj[1]=list1;
  192. obj[2]=list2;
  193. rtnObj=mi.Invoke(Instance,newobject[]{obj});
  194. //rtnObj=mi.Invoke(Instance,newobject[]{param});
  195. }
  196. }
  197. catch(TypeLoadExceptiontle)
  198. {
  199. //記錄Web服務方法參數個數錯誤日志代碼位置
  200. thrownewTypeLoadExce
上一篇:C#縮放和裁剪圖片

下一篇:solr熱身

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 青浦区| 怀宁县| 博兴县| 通化市| 宜丰县| 怀柔区| 甘肃省| 呼图壁县| 龙海市| 蒙阴县| 苍南县| 白山市| 澄江县| 通州区| 湘西| 葵青区| 满洲里市| 襄汾县| 嘉峪关市| 红桥区| 阳江市| 乌海市| 贵港市| 漠河县| 阳山县| 澄江县| 怀仁县| 进贤县| 云阳县| 边坝县| 中宁县| 星座| 微博| 宽城| 寻乌县| 沙雅县| 肃北| 呼和浩特市| 巨野县| 商丘市| 临城县|