zoukankan      html  css  js  c++  java
  • webservice调用天气

      class WebServiceHelper
        {
            /// <summary>
            /// 动态调用WebService
            /// </summary>
            /// <param name="url">WebService地址</param>
            /// <param name="methodname">方法名(模块名)</param>
            /// <param name="args">参数列表,无参数为null</param>
            /// <returns>object</returns>
            public static object InvokeWebService(string url, string methodname, object[] args)
            {
                return InvokeWebService(url, null, methodname, args);
            }
            /// <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 = "fangqm.Netbank.WebService.webservice";
                if (classname == null || classname == "")
                {
                    classname = WebServiceHelper.GetClassName(url);
                }
                //获取服务描述语言(WSDL)
                WebClient wc = new WebClient();
                Stream stream = wc.OpenRead(url + "?WSDL");//【1】
                System.Web.Services.Description.ServiceDescription sd = System.Web.Services.Description.ServiceDescription.Read(stream);//【2】
                ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();//【3】
                sdi.AddServiceDescription(sd, "", "");
                CodeNamespace cn = new CodeNamespace(@namespace);//【4】
                                                                 //生成客户端代理类代码
                CodeCompileUnit ccu = new CodeCompileUnit();//【5】
                ccu.Namespaces.Add(cn);
                sdi.Import(cn, ccu);
                CSharpCodeProvider csc = new CSharpCodeProvider();//【6】
                ICodeCompiler icc = csc.CreateCompiler();//【7】
                                                         //设定编译器的参数
                CompilerParameters cplist = new CompilerParameters();//【8】
                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);//【9】
                if (true == cr.Errors.HasErrors)
                {
                    System.Text.StringBuilder sb = new StringBuilder();
                    foreach (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 bj = Activator.CreateInstance(t);//【10】
                System.Reflection.MethodInfo mi = t.GetMethod(methodname);//【11】
                return mi.Invoke(bj, args);
    
            }
            private static string GetClassName(string url)
            {
                //假如URL为"http://localhost/InvokeService/Service1.asmx"
                //最终的返回值为 Service1
                string[] parts = url.Split('/');
                string[] pps = parts[parts.Length - 1].Split('.');
                return pps[0];
            }
        }
     string url = "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx";
                        string[] array = new string[1];
                        array[0] = city.Replace("", "");
                        object tresult = WebServiceHelper.InvokeWebService(url, "getWeatherbyCityName", array);
                        string[] result = (string[])tresult;
                        if (result[8] == "")
                        {
                            content = result[0] + result[6];
                        }
                        else
                        {
                            //对应的天气图片  天气区间  晴  当前气温  城市名称
                            int startIndex = result[10].IndexOf("气温:");
                            int endIndex = result[10].IndexOf("");
                            string currentDegree = result[10].Substring(startIndex + 3, endIndex - startIndex - 3);
                            content = result[8] + "&&" + result[5] + "&&" + result[6].Split(' ')[1] + "&&" + currentDegree + "&&" + city;
                        }
  • 相关阅读:
    Ubuntu 16 安装redis客户端
    crontab 参数详解
    PHP模拟登录发送闪存
    Nginx配置端口访问的网站
    Linux 增加对外开放的端口
    Linux 实用指令之查看端口开启情况
    无敌的极路由
    不同的域名可以指向同一个项目
    MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error
    Redis 创建多个端口
  • 原文地址:https://www.cnblogs.com/MrZivChu/p/webservice.html
Copyright © 2011-2022 走看看