动态调用WebService
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89 |
public
class ServiceProxy { #region InvokeWebService [SecurityPermissionAttribute(SecurityAction.Demand, Unrestricted = true )] internal
static object CallWebService( string
webServiceAsmxUrl, string
serviceName, string
methodName, object [] args) { var
client = new
WebClient(); // Connect To the web service var
stream = client.OpenRead(webServiceAsmxUrl + "?wsdl" ); if
(stream == null ) return
null ; // Now read the WSDL file describing a service. var
description = ServiceDescription.Read(stream); ///// LOAD THE DOM ///////// // Initialize a service description importer. var
importer = new
ServiceDescriptionImporter {ProtocolName = "Soap12" }; importer.AddServiceDescription(description, null , null ); // Generate a proxy client. importer.Style = ServiceDescriptionImportStyle.Client; // Generate properties to represent primitive values. importer.CodeGenerationOptions = System.Xml.Serialization.CodeGenerationOptions.GenerateProperties; // Initialize a Code-DOM tree into which we will import the service. var
nmspace = new
CodeNamespace(); var
unit1 = new
CodeCompileUnit(); unit1.Namespaces.Add(nmspace); // Import the service into the Code-DOM tree. This creates proxy code that uses the service. ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit1); if
(warning == 0) // If zero then we are good to go { // Generate the proxy code CodeDomProvider provider1 = CodeDomProvider.CreateProvider( "CSharp" ); // Compile the assembly proxy with the appropriate references var
assemblyReferences = new
string [5] { "System.dll" , "System.Web.Services.dll" , "System.Web.dll" , "System.Xml.dll" , "System.Data.dll"
}; var
parms = new
CompilerParameters(assemblyReferences); var
results = provider1.CompileAssemblyFromDom(parms, unit1); // Check For Errors if
(results.Errors.Count > 0) { foreach
(CompilerError oops in
results.Errors) { System.Diagnostics.Debug.WriteLine( "========Compiler error============" ); System.Diagnostics.Debug.WriteLine(oops.ErrorText); } throw
new System.Exception( "Compile Error Occured calling webservice. Check Debug ouput window." ); } // Finally, Invoke the web service method var
wsvcClass = results.CompiledAssembly.CreateInstance(serviceName); if
(wsvcClass == null ) return
null ; var
mi = wsvcClass.GetType().GetMethod(methodName); return
mi.Invoke(wsvcClass, args); } else
{ return
null ; } } #endregion public
static object CallWebService( string
webServiceAsmxUrl, string
serviceName) { throw
new System.NotImplementedException(); } } |
//调用 var url = "www.myweb.com/service1.asmx"; var args = new object[2]; args[0] = "参数1"; args[1] = "参数2"; var result = ServiceProxy.CallWebService(url,"服务名称", "方法名称", args); return result.ToString() ;//Web服务中方法的返回值
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。