zoukankan      html  css  js  c++  java
  • WebService 安静点

    WebService

    寄宿在IIS,也就是必须在网站项目

    五大要素

    (1)http传输信道/传输协议

    它指定了A服务器到B服务器,数据是什么格式传递的

    (2)XML的数据格式

    数据是以xml格式传输的

    (3)SOAP协议(简单对象访问协议)

    它是一种封装格式,在分布式环境中,描述了如何交换数据的轻量级协议。

    (4)WSDL

    用于精确描述Web Service的文档格式, 也就是Web 服务描述语言。,在地址后面拼上wsdl,可以看到发布的服务上的一些方法信息,方法的返回类型等信息

    (5)UDDI  

    UDDI的话,是一个跨产业,跨平台的开放性架构,可以帮助 Web 服务提供商在互联网上发布 Web 服务的信息。

    UDDI 呢是一种目录服务,企业可以通过 UDDI 来注册和搜索 Web 服务。

    简单来时候话,UDDI 就是一个目录,只不过在这个目录中存放的是一些关于 Web 服务的信息而已。

    总体来说就是WebService遵循SOAP协议通过XML封装数据,然后由Http协议来传输数据。一次Web Service的调用,其实并不是方法的调用,而是发生SOAP消息(即xml文档片段)。

    创建步骤

    下面是在一个mvc项目中创建服务,选择红框中的数据:

     

     下面是创建的代码:

     /// <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]
        //如果需要服务对外开放 必须标记  [WebMethod]
        //数据库格式:XMl
        //方法不能重名;
    
        //WebService 5大要素:
        //
        public class MyWebService : System.Web.Services.WebService
        {
    
            public CustomSoapHeader CustomSoapHeaderPop { get; set; }
            /// <summary>
            ///  只有标记了[WebMethod]这个特性,才能够对外开放
            /// </summary>
            /// <returns></returns>
            [WebMethod]
            public string HelloWorld()
            {
                return "Hello World";
            }
    
            [WebMethod]
            [SoapHeader("CustomSoapHeaderPop")]
            public string Get()
            {
                if (!CustomSoapHeaderPop.Validate())
                {
                    throw new SoapException("认证失败", SoapException.ClientFaultCode);
                }
    
                return "欢迎大家来到.net高级班的Vip课程";
            }
            [WebMethod] //如果需要服务对外开放 必须标记  [WebMethod]
            [SoapHeader("CustomSoapHeaderPop")]
            public string GetInfo()
            {
                if (!CustomSoapHeaderPop.Validate())
                {
                    throw new SoapException("认证失败", SoapException.ClientFaultCode);
                }
                return Newtonsoft.Json.JsonConvert.SerializeObject(new
                {
                    Id = 123,
                    Name = "棒棒糖"
                });
            }
    
            [WebMethod]
            [SoapHeader("CustomSoapHeaderPop")]
            public string GetStudent(int i, string y)
            {
                if (!CustomSoapHeaderPop.Validate())
                {
                    throw new SoapException("认证失败", SoapException.ClientFaultCode);
                }
                return Newtonsoft.Json.JsonConvert.SerializeObject(new
                {
                    i = i,
                    y = y
                });
            }
    
            [WebMethod]
            public UserInfo GetUserInfo(string name, string password)
            {
                //if (name.Equals("Richard")&&password.Equals("123456"))
                //{
    
                //}
    
    
                return new UserInfo()
                {
                    Id = 234,
                    Name = "Richard"
                };
            }
    
            [WebMethod]
            public List<UserInfo> GetInfoList(int i, string y)
            {
                return new List<UserInfo>() {
                new UserInfo()
                {
                    Id = 345,
                    Name = "阳光下的微笑"
                },
                  new UserInfo()
                {
                    Id = 345,
                    Name = "深海无息"
                }
            };
            }
    
        }

    界面展示:

     比如点击一个GetInfoList:

     结果:

    返回的是xml格式数据。

    需要注意的:

    (1)webservice中方法名称不能重复,就算是参数不一致也不行

    (2)要想对外展示就得添加[WebMethod]特性

     

    IIS发布步骤

     参考文章

     还有一个点,webservice对于列表数据是默认的数组的,所以在调用服务中的这个方法的时候,接收的时候直接List会报错,可以通过下面方式进行更改:

    Jquery ajax调用webservice总结 

    WebService用户认证

     因为webservice是对外开放的,所以可以被随意调用,所以必须要加限制,要不然不安全。

    (1)Form认证

    (2)windows认证

    (3)服务方法里面添加账号密码参数

    (4)SoapHeader验证

    自定义的soap:

        /// <summary>
        /// Header:分配个加密钥  账号密码加密
        /// 
        /// </summary>
        public class CustomSoapHeader : System.Web.Services.Protocols.SoapHeader
        {
    
            private string userName = string.Empty;
            private string passWord = string.Empty;
            public CustomSoapHeader()//必须有一个无参数的构造函数
            { }
    
            /// <summary>
            /// 构造函数   这里的name和password是在调用服务的时候传来的
            /// </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 this.UserName.Contains("Richard") && this.PassWord.Contains("123456");
            }
    
        }

    调用:

            public void TestMethod1()
            {
                //using 有什么作用?释放资源,因为在这里是会创建连接的,是网络资源,如果不释放的话,还是会存在的。
                using (MyWebServiceTest.MyWebServiceSoapClient client = new MyWebServiceTest.MyWebServiceSoapClient())
                {
                    MyWebServiceTest.CustomSoapHeader heade = new MyWebServiceTest.CustomSoapHeader();
                    heade.UserName = "Richard";
                    heade.PassWord = "123456";
                    string str = client.Get(heade);
                    string info = client.GetInfo(heade);
                    string studnet = client.GetStudent(heade, 123, "Richard");
                    str = client.GetAsync(heade).Result.GetResult;
                    var userInfoList = client.GetInfoList(123, "Richard");
                     
                }
            }

    关于WEB Service&WCF&WebApi实现身份验证之WEB Service篇

  • 相关阅读:
    JavaScript--Promise(1)
    JavaScript--创建对象
    JavaScript--JSON
    JavaScript--generator
    JavaScript--闭包(1)
    JavaScript--sort()
    JavaScript--filter()
    JavaScript--map()&reduce()
    JavaScript--map&set
    3.11
  • 原文地址:https://www.cnblogs.com/anjingdian/p/15404900.html
Copyright © 2011-2022 走看看