2024年4月20日发(作者:)

整理,内容来源于网络及本人实践】

前面整理了一篇关于VS2008实现简单的WebService的文章,但里面的调用是静态的,当

服务地址更改后,需要重新编译程序,对于很多应用来说是不现实的。本文介绍一下C#动

态调用WebService的方法。

1.实现

写个叫WebServiceHelper的类

[csharp] view plaincopyprint?

1. namespace webhelp

2. {

3. using System;

4. using ;

5. using ;

6. using m;

7. using ;

8. using er;

9. using ption;

10. using ols;

11. public class WebServiceHelper

12. {

13. #region InvokeWebService

14.

15. public static object InvokeAndCallWebService(string url, string methodname,

object[] args)

16. {

17. return AndCallWebService(url, null, methodname,

args);

18. }

19. public static object InvokeAndCallWebService(string url,/* string @namespace,

*/string classname, string methodname, object[] args)

20. {

21. string @namespace = "cWebCalling";

22. if ((classname == null) || (classname == ""))

23. {

24. classname = lassName(url);

25. }

26.

27. try

28. {

29. //获取WSDL

30. WebClient webClient = new WebClient();

31. Stream stream = ad(url + "?WSDL");

32. ServiceDescription description = (stream);

33. ServiceDescriptionImporter descriptionImporter = new

ServiceDescriptionImporter();

34. viceDescription(description, "", "");

35. CodeNamespace codeNamespace = new CodeNamespace(@namespace);

36.

37. //生成客户端代理类代码

38. CodeCompileUnit codeCompileUnit = new CodeCompileUnit();

39. (codeNamespace);

40. (codeNamespace, codeCompileUnit);

41. CSharpCodeProvider codeProvider = new CSharpCodeProvider();

42.

43. //设定编译参数

44. CompilerParameters compilerParameters = new CompilerParameters();

45. teExecutable = false;

46. teInMemory = true;

47. ("");

48. ("");

49. ("");

50. ("");

51.

52. //编译代理类

53. CompilerResults codeResult =

eAssemblyFromDom(compilerParameters, codeCompileUnit);

54. if (true == ors)

55. {

56. Builder stringBuilder = new Builder();