C# WebService调用方法

2 篇文章 0 订阅
1 篇文章 0 订阅
 public class WebServiceHelper
    {
        /// < summary> 
        /// 动态调用web服务 
        /// < /summary> 
        /// < param name="methodname">方法名< /param> 
        /// < param name="args">参数< /param> 
        /// < returns>< /returns> 
        public static object InvokeWebService(string methodname, object[] args)
        {
            string url = "http://localhost:8080/myWebService.asmx";
            string @namespace = "myWebService";//命名空间
            string classname = WebServiceHelper.GetWsClassName(url);//"myWebService";
            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);
                CSharpCodeProvider icc = new CSharpCodeProvider();
                //设定编译参数 
                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 = icc.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);
                return mi.Invoke(obj, args);
                // PropertyInfo propertyInfo = type.GetProperty(propertyname); 
                //return propertyInfo.GetValue(obj, null); 
            }
            catch (Exception ex)
            {
                throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace));
            }
        }
        private static string GetWsClassName(string wsUrl)
        {
            string[] parts = wsUrl.Split('/');
            string[] pps = parts[parts.Length - 1].Split('.');
            return pps[0];
        }

    }


//调用webservice示例:

/// <summary>
        /// 用户登录验证
        /// </summary>
        /// <param name="username">用户名</param>
        /// <param name="pwd">密码</param>
        /// <param name="userid">用户id</param>
        /// <param name="error">接口异常信息</param>
        /// <returns>登录成功返回true</returns>
        public bool Login(string username, string pwd, out string userid, out string error)
        {
            object[] obj = new object[] { username, pwd,null, null };
            bool res = (bool)WebServiceHelper.InvokeWebService("Login", obj);
            userid = (string)obj[2];
            error = (string)obj[3];
            return res;
        }

要使用C#调用Web服务接口,可以按照以下步骤进行操作: 1. 引用WebService:首先,需要引用WebService的命名空间,例如using System.Web.Services;。 2. 创建代理:使用Visual Studio或者通过命令行工具生成代理,通过生成的代理可以直接调用Web服务中的方法。可以使用命令行工具wsdl.exe来生成代理,命令示例如下:wsdl /language:c# /out:生成的代理路径 /url:WebService的URL或者WSDL文件路径。 3. 创建WebService对象:在代码中创建WebService对象,并设置其属性,例如WebClient对象的Credentials属性可以设置身份验证信息。 4. 调用Web服务方法:通过创建的代理对象,调用Web服务中的方法。可以将方法的输入参数传递给Web服务方法,并接收返回值。 5. 解析返回结果:根据Web服务方法的返回型,解析返回结果,可以使用XmlReader或者XmlDocument来解析返回的XML数据,也可以使用DataContractSerializer或者XmlSerializer进行反序列化。 6. 处理异常:在调用Web服务方法时,可能会抛出异常,需要进行异常处理。可以使用try-catch语句捕获异常,并根据具体情况进行处理。 总结: 要使用C#调用Web服务接口,首先引用WebService的命名空间,然后生成代理,创建WebService对象并调用方法,最后解析返回结果和处理异常。这样就可以实现C#Web服务接口的调用了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C#动态webservice调用接口](https://download.csdn.net/download/weixin_38657139/13786952)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [c# 三种方法调用WebService接口](https://download.csdn.net/download/weixin_38567956/13708848)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [C#调用webservice接口的最新方法教程](https://download.csdn.net/download/weixin_38556189/13999366)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐天zhifengfly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值