随手记:C#需要调用WebService接口的步骤

方法一:

需要WebService接口的内容。

一、开发环境下的WebService接口调用

1、需要从接口站点访问WebService文件

2、点击“服务说明”,将内容存成xml文件

3、将存出来的文件后缀名改成“wsdl”

4、在需要调用接口的项目--Service References中,添加服务引用

5、添加完服务引用,就可以正常调用啦

 开发环境下的调用就完成了。

二、iis部署

1、在添加服务引用时,会在相应的项目config文件中生成相应的节点,记得要添加的iis服务对应的文件中去。

2、需要注意的事,最外层的web.config也需要添加相应的节点。 

方法二:

当我们只知道接口地址,且在开发环境中无法访问以及获取接口内容时,可以用第二种方式。第二种方式修改修改的配置文件会少很多,方便部署。

一、实现调用接口(固定的,不需要变动)

        #region InvokeWebService
        /// <summary>  

        /// 动态调用WebService  

        /// </summary>  

        /// <param name="url">WebService地址</param>  

        /// <param name="classname">类名</param>  

        /// <param name="methodname">方法名(模块名)</param>  

        /// <param name="args">参数列表</param>  

        /// <returns>object</returns>  

        public static object InvokeWebService(string url, string classname, string methodname, object[] args)

        {

            string @namespace = "ServiceBase.WebService.DynamicWebLoad";

            if (classname == null || classname == "")
            {
                classname = WebServiceHelper.GetClassName(url);
            }

            //获取服务描述语言(WSDL)  
            WebClient wc = new WebClient();
            LogHelper.Info("InvokeWebService:打开链接:" + url);
            Stream stream = wc.OpenRead(url + "?WSDL");

            ServiceDescription sd = ServiceDescription.Read(stream);

            ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();

            sdi.AddServiceDescription(sd, "", "");

            CodeNamespace cn = new CodeNamespace(@namespace);

            //生成客户端代理类代码  
            LogHelper.Info("InvokeWebService:生成客户端代理类代码 ");
            CodeCompileUnit ccu = new CodeCompileUnit();

            ccu.Namespaces.Add(cn);

            sdi.Import(cn, ccu);

            CSharpCodeProvider csc = new CSharpCodeProvider();

            ICodeCompiler icc = csc.CreateCompiler();

            //设定编译器的参数  
            LogHelper.Info("InvokeWebService:设定编译器的参数 ");
            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");

            //编译代理类  
            LogHelper.Info("InvokeWebService:编译代理类 ");
            CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu);

            if (true == cr.Errors.HasErrors)

            {

                System.Text.StringBuilder sb = new System.Text.StringBuilder();

                foreach (CompilerError ce in cr.Errors)

                {

                    sb.Append(ce.ToString());

                    sb.Append(System.Environment.NewLine);

                }

                throw new Exception(sb.ToString());
                LogHelper.Info("Exception>>" + sb.ToString());

            }

            //生成代理实例,并调用方法  
            LogHelper.Info("InvokeWebService:生成代理实例,并调用方法>>" + cr.CompiledAssembly);
            System.Reflection.Assembly assembly = cr.CompiledAssembly;
            LogHelper.Info("InvokeWebService:生成代理实例,并调用方法>>" + @namespace + "." + classname + ">>" + assembly);
            Type t = assembly.GetType(@namespace + "." + classname, true, true);
            LogHelper.Info("InvokeWebService:生成代理实例,并调用方法>>执行CreateInstance:" + t);
            object obj = Activator.CreateInstance(t);
            LogHelper.Info(obj.ToString());
            LogHelper.Info("InvokeWebService:生成代理实例,并调用方法>>执行CetMethod>>methodname" + methodname);
            System.Reflection.MethodInfo mi = t.GetMethod(methodname);
            LogHelper.Info("InvokeWebService:生成代理实例,并调用方法>>执行Invoke");
            object objmi = null;
            try
            {
                if (mi == null)
                {
                    LogHelper.Info("为空");
                }
                objmi = mi.Invoke(obj, args);
            }
            catch (Exception ex)
            {
                LogHelper.Info("InvokeWebService>>Exception:" + ex);
            }
            return objmi;
        }
        private static string GetClassName(string url)
        {

            string[] parts = url.Split('/');

            string[] pps = parts[parts.Length - 1].Split('.');

            return pps[0];

        }
        #endregion

二、调用

string url = "http://XXXXXX/AAA/WebService.asmx";/
string hisXML = WebServiceHelper.InvokeWebService(url, null, "InsertPatient", new object[] { 参数1,参数2,参数3 }) as string;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值