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();
            }

        }
    }
}

  • 执行结果如下图
    在这里插入图片描述

相关推荐

  1. 使用.net core 调用C#WebService的三种方式

    2024-04-02 11:58:01       12 阅读
  2. Webservice调用方式解析!

    2024-04-02 11:58:01       40 阅读
  3. 调用外部的webservice示例

    2024-04-02 11:58:01       10 阅读
  4. c#调用Delphi编写DLL

    2024-04-02 11:58:01       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-02 11:58:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-02 11:58:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-02 11:58:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-02 11:58:01       18 阅读

热门阅读

  1. docker compose部署项目—踩坑记录

    2024-04-02 11:58:01       13 阅读
  2. Linux中的用户和组管理

    2024-04-02 11:58:01       12 阅读
  3. Go-Gin全局错误处理中间件

    2024-04-02 11:58:01       11 阅读
  4. C++ TCP 服务端和客户端通信的例子

    2024-04-02 11:58:01       12 阅读
  5. 前端 prefetch 和 preload 的区别?

    2024-04-02 11:58:01       14 阅读
  6. Yarn 包管理器入门指南

    2024-04-02 11:58:01       14 阅读
  7. linux定时调度任务

    2024-04-02 11:58:01       12 阅读
  8. Hadoop系列总结

    2024-04-02 11:58:01       16 阅读
  9. openGL创建平面、立方体、圆柱体、斜面和棱柱Demo

    2024-04-02 11:58:01       14 阅读
  10. redis-Hash

    2024-04-02 11:58:01       15 阅读
  11. 【Vmware】 debian 12 安装教程

    2024-04-02 11:58:01       20 阅读