代碼動態調用webservice的類

來源:互聯網
上載者:User
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Net;using System.IO;using System.Web;//需要右鍵添加.NET組件System.Web,System.Web.Services,System.Web.Extensions。using System.Web.Services;using System.Web.Services.Description;using System.Web.Services.Protocols;using System.Xml.Serialization;using System.CodeDom;using System.CodeDom.Compiler;using System.Reflection;namespace myWebServiceNameSpace{    class myWebServiceClass    {        /// <summary>        /// webservice返回是string的,使用該方法        /// </summary>        /// <param name="url">調用webservice的url</param>        /// <param name="className">webservice的類</param>        /// <param name="methodName">調用webservice的方法</param>        /// <param name="parameters">方法的參數</param>        /// <returns>string</returns>        public string resultString(string url, string className, string methodName, object[] parameters)        {            string resultA = "";            try            {                // 1. 使用 WebClient 下載 WSDL 資訊。                WebClient client = new WebClient();                url = url + "?WSDL";                Stream stream = client.OpenRead(url);                // 2. 建立和格式化 WSDL 文檔。                ServiceDescription description = ServiceDescription.Read(stream);                // 3. 建立用戶端代理代理類。                ServiceDescriptionImporter importer = new ServiceDescriptionImporter();//建立用戶端代理代理類。                importer.ProtocolName = "Soap"; //指定訪問協議。                importer.Style = ServiceDescriptionImportStyle.Client; //產生用戶端代理。                importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync;                importer.AddServiceDescription(description, null, null); //添加WSDL文檔。                // 4. 使用 CodeDom 編譯用戶端代理類。                CodeNamespace nmspace = new CodeNamespace(); //命名空間                CodeCompileUnit unit = new CodeCompileUnit();                unit.Namespaces.Add(nmspace);                ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit);                CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");                CompilerParameters parameter = new CompilerParameters();                parameter.GenerateExecutable = false;                parameter.ReferencedAssemblies.Add("System.dll");                parameter.ReferencedAssemblies.Add("System.XML.dll");                parameter.ReferencedAssemblies.Add("System.Web.Services.dll");                parameter.ReferencedAssemblies.Add("System.Data.dll");                CompilerResults result = provider.CompileAssemblyFromDom(parameter, unit);                // 5. 使用 Reflection 調用 WebService。                Assembly asm = result.CompiledAssembly;                Type t = asm.GetType(className); //參數為web服務中的類名                object o = Activator.CreateInstance(t);                MethodInfo method = t.GetMethod(methodName);//參數方法名                resultA = (string)method.Invoke(o, parameters);            }            catch (Exception ex)            {                resultA = ex.ToString();            }            return resultA;        }        /// <summary>        /// webservice返回是DataSet的,使用該方法        /// </summary>        /// <param name="url">調用webservice的url</param>        /// <param name="className">webservice的類</param>        /// <param name="methodName">調用webservice的方法</param>        /// <param name="parameters">方法的參數</param>        /// <returns>DataSet</returns>        public DataSet resultDataSet(string url, string className, string methodName, object[] parameters)        {            DataSet resultA =null;            try            {                // 1. 使用 WebClient 下載 WSDL 資訊。                WebClient client = new WebClient();                url = url + "?WSDL";                Stream stream = client.OpenRead(url);                // 2. 建立和格式化 WSDL 文檔。                ServiceDescription description = ServiceDescription.Read(stream);                // 3. 建立用戶端代理代理類。                ServiceDescriptionImporter importer = new ServiceDescriptionImporter();//建立用戶端代理代理類。                importer.ProtocolName = "Soap"; //指定訪問協議。                importer.Style = ServiceDescriptionImportStyle.Client; //產生用戶端代理。                importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync;                importer.AddServiceDescription(description, null, null); //添加WSDL文檔。                // 4. 使用 CodeDom 編譯用戶端代理類。                CodeNamespace nmspace = new CodeNamespace(); //命名空間                CodeCompileUnit unit = new CodeCompileUnit();                unit.Namespaces.Add(nmspace);                ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit);                CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");                CompilerParameters parameter = new CompilerParameters();                parameter.GenerateExecutable = false;                parameter.ReferencedAssemblies.Add("System.dll");                parameter.ReferencedAssemblies.Add("System.XML.dll");                parameter.ReferencedAssemblies.Add("System.Web.Services.dll");                parameter.ReferencedAssemblies.Add("System.Data.dll");                CompilerResults result = provider.CompileAssemblyFromDom(parameter, unit);                // 5. 使用 Reflection 調用 WebService。                Assembly asm = result.CompiledAssembly;                Type t = asm.GetType(className); //參數為web服務中的類名                object o = Activator.CreateInstance(t);                MethodInfo method = t.GetMethod(methodName);//參數方法名                resultA = (DataSet)method.Invoke(o, parameters);            }            catch (Exception ex)            {                MessageBox.Show(ex.ToString());            }            return resultA;        }    }}

以上是.cs中的代碼。

        private void button3_Click(object sender, EventArgs e)        {            myWebServiceNameSpace.myWebServiceClass myWeb = new myWebServiceNameSpace.myWebServiceClass();            string url = "http://10.19.1.55/123/WebService1.asmx";            string className = "WebService1";            string methodName = "addition";            object[] parameters = new object[2];            parameters[0] = 1;            parameters[1] = 2;            double a = myWeb.resultString(url, className, methodName, parameters);            MessageBox.Show(a.ToString());                    }

以上是主程式中的代碼。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.