动态调用WebService
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服务中方法的返回值