C# 【WebService编写调用】

Webservice 学习

创建

  • 新增专案
    新增专案

  • 点击确定,选择空白
    在这里插入图片描述

  • 右击新建好的专案下图中操作
    在这里插入图片描述

  • 新增项目选择 WEB 服务(ASMX)
    在这里插入图片描述

  • 新增项目完成,添加Web方法
    在这里插入图片描述

  • 启动之后的效果如下
    在这里插入图片描述

  • 调用方法测试接口
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/6eca562de55c45a3af212c270a51919a.png

  • 测试结果如下,”page is valid“ 在这里插入图片描述

发布

  • 右击项目选择发行

  • 在这里插入图片描述

  • 选择项目创建路径,点击发布

  • 在这里插入图片描述

  • 打开IIS添加网址

  • 在这里插入图片描述

  • 双击网址中预设文件

  • 在这里插入图片描述

  • 名称保持一致

  • 在这里插入图片描述

  • 浏览器查看,输入 http://localhost:8888/ 或 或者http://localhost:8888/demoSrv.asmx

  • 因为在第9步的时候添加了默认文档,所以直接输入ip+port端口可以直接访问若不新增默认文档,则只能输入第二种方式http://localhost:8888/demoSrv.asmx进行查看

  • 在这里插入图片描述

  • Web Service 查询,点击服务查询可以看见wsdl文件内容

  • 请添加图片描述

调用

  • 新建主控台应用程式(.NET Framework)
  • 在这里插入图片描述
  • 按下图操作
  • 在这里插入图片描述
  • 加入成功之后,编写代码进行调用
using Microsoft.CSharp;
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.IO;
using System.Net;
using System.Web.Services.Description;

//webservice 动态调用方法
namespace demoApp
{
    class WebService
    {
        public WebService()

        {

            //TODO: 在此处添加构造函数逻辑
        }

        #region InvokeWebService
        //动态调用web服务

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

        {
            return WebService.InvokeWebService(url, null, methodname, args);
        }

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

        {
            string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling";

            if ((classname == null) || (classname == ""))

            {

                classname = WebService.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);

                CSharpCodeProvider 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 = 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);

            }

            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];

        }

        #endregion

    }

}

  • 调用webservice动态方法执行
using System;

namespace demoApp
{
    class Program
    {

        static void Main(string[] args)
        {
            try
            {

                object[] Param = new object[2];

                Param[0] = "user";

                Param[1] = "123";

                string url = "http://localhost:8888/demoSrv.asmx";

                string methodname = "Test";

                Object result = WebService.InvokeWebService(url, methodname, Param);

                Console.WriteLine("result: " + result);
                Console.ReadLine();


            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: " + ex.Message);
                Console.ReadLine();
            }

        }
    }
}

  • 执行结果如下图
    在这里插入图片描述
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

终将站在顶峰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值