WebService

Posted 德乌姆列特

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebService相关的知识,希望对你有一定的参考价值。

Web Service

是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的交互操作的应用程序

WebService:寄宿在IIS,也就是必须在网站项目
五大对象

  1. Http传输信道,A服务器到B服务器,数据是什么格式传递的
  2. XML的数据格式---Http传输解析得到的有用数据
  3. SOAP协议---封装格式:在分布式的环境中,描述了如何做数据交换的一个轻量级协议
  4. WSDL:属于webservice的标配,标准化描述服务,方便调用
  5. UDDI:根据描述查找服务的机制

WebService创建

1.搜索asmx创建webservice
2.在MVC路由配置中为WebService指定路由

忽略以Remote开头的文件物理路径

WebService调用

1.在页面上访问remote文件夹下的WebService 即可看到可以访问的方法

注意:

  • 在WebService中想要方法生效需要在方法上添加[WebMethod]特性
  • 在WebService中方法不能重载

查看wsdl

2.在程序中访问

  • 在程序中添加服务引用,分别输入服务地址和命名空间

    在程序中即可看到
    并在程序中生成了一堆代码
    在程序中正式调用,使用后需要释放

WebService身份验证

Web Service身份验证,网上已有许多的相关文章,总结起来有:基于自定义SoapHeader验证、Form验证、集成Windows身份验证、服务方法加入一个或几个验证参数等等
这里只介绍基于自定义SoapHeader验证

  • 自定义SoapHeader
    public class CustomSoapHeader:System.Web.Services.Protocols.SoapHeader
    {
        private string userName = string.Empty;
        private string passWord = string.Empty;
        public CustomSoapHeader()//必须有一个无参数的构造函数
        { }

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="userName">用户名</param>
        /// <param name="passWord">密码</param>
        public CustomSoapHeader(string userName, string passWord)
        {
            this.userName = userName;
            this.passWord = passWord;
        }

        /// <summary>
        /// 获取或设置用户用户名
        /// </summary>
        public string UserName
        {
            get { return userName; }
            set { this.userName = value; }
        }

        /// <summary>
        /// 获取或设置用户密码
        /// </summary>
        public string PassWord
        {
            get { return passWord; }
            set { this.passWord = value; }
        }
        public bool Validate()
        {
            return true;//验证逻辑代码
        }
    }
  • 在服务方法上添加验证
    /// <summary>
    /// MyWebService 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 
    // [System.Web.Script.Services.ScriptService]
    public class MyWebService : System.Web.Services.WebService
    {
        public CustomSoapHeader soapHeader { get; set; }
        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }
        [WebMethod][SoapHeader("soapHeader")]
        public int Plus(int x, int y)
        {
            if (soapHeader.Validate())
            {
                return 0;
            }
            return x + y;
        }
        public string Info()
        {
            return JsonConvert.SerializeObject(new {Name="name",Remark="Hello World!" });
        }
    }
  • 调用方传入验证信息
                using (WebServiceTest.MyWebServiceSoapClient client = new WebServiceTest.MyWebServiceSoapClient())
                {
                    var a = client.HelloWorld();
                    var header = new WebServiceTest.CustomSoapHeader();
                    Console.WriteLine(client.Plus(header, 12, 34));
                    Console.WriteLine(client.Plus(header, 12, 34));
                    Console.WriteLine(a);
                }

其他验证方法:https://www.cnblogs.com/zuowj/p/4981919.html

以上是关于WebService的主要内容,如果未能解决你的问题,请参考以下文章

C#动态调用webService出现 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。

Java RMI地址解析问题

当我们在webservice.asmx.cs中编写所有代码时,webservice.asmx有啥用?

自动生成webservice客户端代码后怎么调用

在idea中,怎么生成cxf webservice的客户端代码

如何调用webservice接口 ajax