webservice实例

来源:互联网 发布:win8 怎么安装ubuntu 编辑:程序博客网 时间:2024/05/29 14:52

调用方法(无需改动,通用方法):WebServiceHelp.cs:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net;using System.IO;using System.Web.Services.Description;using System.CodeDom;using Microsoft.CSharp;using System.CodeDom.Compiler;using System.Data;namespace Tlw.zjxypj.Common{   public class WebServiceHelp    {        #region  WebServices连接方法       /// <summary>       /// 调用webservice方法       /// </summary>       /// <param name="url">地址</param>       /// <param name="methodname">方法名</param>       /// <param name="args">参数</param>       /// <returns>结果</returns>        public object InvokeWebService(string url, string methodname, object[] args)        {            return InvokeWebService(url, null, methodname, args);        }        public object InvokeWebService(string url, string classname, string methodname, object[] args)        {            string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling";            if ((classname == null) || (classname == ""))            {                classname = GetWsClassName(url);            }            try            {                //获取WSDL                WebClient wc = new WebClient();                Stream stream = wc.OpenRead(url + "?WSDL");                ServiceDescription sd = ServiceDescription.Read(stream);                ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();                sdi.AddServiceDescription(sd, "", "");                CodeNamespace cn = new CodeNamespace(@namespace);                //生成客户端代理类代码                CodeCompileUnit ccu = new CodeCompileUnit();                ccu.Namespaces.Add(cn);                sdi.Import(cn, ccu);                CodeDomProvider csc = new CSharpCodeProvider();                //ICodeCompiler icc = csc.CreateCompiler();                //设定编译参数                CompilerParameters cplist = new CompilerParameters();                cplist.GenerateExecutable = false;                cplist.GenerateInMemory = true;                cplist.ReferencedAssemblies.Add("System.dll");                cplist.ReferencedAssemblies.Add("System.XML.dll");                cplist.ReferencedAssemblies.Add("System.Web.Services.dll");                cplist.ReferencedAssemblies.Add("System.Data.dll");                //编译代理类                CompilerResults cr = csc.CompileAssemblyFromDom(cplist, ccu);                if (true == cr.Errors.HasErrors)                {                    System.Text.StringBuilder sb = new System.Text.StringBuilder();                    foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors)                    {                        sb.Append(ce.ToString());                        sb.Append(System.Environment.NewLine);                    }                    throw new Exception(sb.ToString());                }                //生成代理实例,并调用方法                System.Reflection.Assembly assembly = cr.CompiledAssembly;                Type t = assembly.GetType(@namespace + "." + classname, true, true);                object obj = Activator.CreateInstance(t);                System.Reflection.MethodInfo mi = t.GetMethod(methodname);                if (args == null)                    return mi.Invoke(obj, null);                else                    return mi.Invoke(obj, args);            }            catch (Exception ex)            {                throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace));            }        }        private string GetWsClassName(string wsUrl)        {            string[] parts = wsUrl.Split('/');            string[] pps = parts[parts.Length - 1].Split('.');            return pps[0];        }        #endregion    }}

调用方法:WebServiceGetInfo.cs

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Xml;using System.Xml.Serialization;using System.ComponentModel.DataAnnotations;using System.Reflection;using System.Data;using System.IO;using System.Text;using System.Configuration;//调取服务接口。namespace Tlw.zjxypj.Common{    public class WebServiceGetInfo    {        /// <summary>        /// 调取接口得到单点登录验证串        /// </summary>        /// <param name="Ojstr">验证码LoginByUserID</param>        /// <returns></returns>        public string GetGuid(string Ojstr)        {            try            {            WebServiceHelp WS = new WebServiceHelp();            object[] args = new object[1];            //args[0] = "80567121A52142C0AEE005F91492F674";            args[0] = Ojstr;            object result = WS.InvokeWebService("http://xxx/signonwebservice2005/xxx.asmx", null, "LoginByUserID", args);            return result.ToString();            }            catch (Exception ex)            {                throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace));            }        }        /// <summary>        /// 调取接口,返回datatable        /// </summary>        /// <param name="name">姓名</param>        /// <param name="id">身份证号</param>        /// <param name="guid">验证码LoginByUserID</param>        /// <returns></returns>        public  DataTable GetWebInfo(string name,string id)        {            try            {                string str = ConfigurationManager.AppSettings["LoginByUserID"];                string[] stra = { name, id, GetGuid(str) };                object[] args = stra;                WebServiceHelp WS = new WebServiceHelp();                object result = WS.InvokeWebService("http://xxx/xxx/xxxx/xxxxx.asmx", null, "GetBasePersonInfoListByCondition", args);                return ReadXmlData(ObjectToSoapXml(result)).Tables[0];            }            catch(Exception ex)            {                throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace));            }        }        #region 读取XML数据转成DataSet    object转换成XML        /// <summary>        /// 读取XML数据转成DataSet        /// </summary>        protected DataSet ReadXmlData(string strxml)        {            StringReader stream = null;            XmlTextReader reader = null;            DataSet ds = new DataSet();            string strxml1 = "<getCreditInfo>" + strxml + "</getCreditInfo>";            stream = new StringReader(strxml1);            reader = new XmlTextReader(stream);            ds.ReadXml(reader);            return ds;        }        /// <summary>        /// object转换成XML        /// </summary>        /// <param name="o"></param>        /// <returns></returns>        private static string ObjectToSoapXml(object o)        {            XmlSerializer mySerializer = new XmlSerializer(o.GetType());            MemoryStream ms = new MemoryStream();            mySerializer.Serialize(ms, o);            XmlDocument doc = new XmlDocument();            doc.LoadXml(Encoding.UTF8.GetString(ms.ToArray()));            if (doc.DocumentElement != null)            {                return doc.DocumentElement.InnerXml;            }            else            {                return o.ToString();            }        }        #endregion    }}
0 0