(精华)2020年11月3日 WebService WebService的基本使用

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

Http协议 SOAP协议

1 Http传输信道,A服务器到B服务器,数据是什么格式传递的
2 XML的数据格式—Http传输解析得到的有用数据
3 SOAP协议—封装格式:在分布式的环境中,描述了如何做数据交换的一个轻量级协议
4 WSDL:属于webservice的标配,标准化描述服务,方便调用
5 UDDI:根据描述查找服务的机制
服务端调用WebService添加服务引用,基于svcUtil.exe生成的
基于wsdl生成的一个代理:屏蔽服务调用的复杂性
单元测试:测试方法—回归测试
WebService安全认证:
Form认证 windows认证
服务方法里面添加账号密码参数
SoapHeader验证

下面来说说WebService的使用:

一:在asp.net网站的路由中配置如下代码

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("Remote/{*pathInfo}");//忽略以Remote开头

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

二:服务端

/// <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; }

    [WebMethod]
    public string HelloWorld()
    {
        return "Hello World";
    }

    [WebMethod]
    [SoapHeader("CustomSoapHeaderPop")]
    public string Get()
    {
        if (!CustomSoapHeaderPop.Validate())
        {
            throw new SoapException("认证失败",SoapException.ClientFaultCode);
        }

        return "认证成功";
    }
    [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 = "xut"
        };
    }

    [WebMethod]
    public List<UserInfo> GetInfoList(int i, string y)
    {
        return new List<UserInfo>() {
        new UserInfo()
        {
            Id = 345,
            Name = "阳光下的微笑"
        },
          new UserInfo()
        {
            Id = 345,
            Name = "深海无息"
        } 
    };
    }
}
/// <summary>
/// Header:分配个加密钥  账号密码加密
/// 
/// </summary>
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 this.UserName.Contains("Richard") && this.PassWord.Contains("123456");
    }

}
public class UserInfo
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

三:引用端

[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void TestMethod1()
    {
        //using 有什么作用?
        using (MyWebServiceTest.MyWebServiceSoapClient client = new MyWebServiceTest.MyWebServiceSoapClient())
        {
            MyWebServiceTest.CustomSoapHeader heade = new MyWebServiceTest.CustomSoapHeader();
            heade.UserName = "xut";
            heade.PassWord = "123456";
            string str = client.Get(heade);
            string info = client.GetInfo(heade);
            string studnet = client.GetStudent(heade, 123, "xut");
            str = client.GetAsync(heade).Result.GetResult;
            var userInfoList = client.GetInfoList(123, "xut");
        }
    }
}
已标记关键词 清除标记
相关推荐
课程简介: 历经半个多月的时间,Debug亲自撸的 “企业员工角色权限管理平台” 终于完成了。正如字面意思,本课程讲解的是一个真正意义上的、企业级的项目实战,主要介绍了企业级应用系统中后端应用权限的管理,其中主要涵盖了六大核心业务模块、十几张数据库表。 其中的核心业务模块主要包括用户模块、部门模块、岗位模块、角色模块、菜单模块和系统志模块;与此同时,Debug还亲自撸了额外的附属模块,包括字典管理模块、商品分类模块以及考勤管理模块等等,主要是为了更好地巩固相应的技术栈以及企业应用系统业务模块的开发流程! 核心技术栈列表: 值得介绍的是,本课程在技术栈层面涵盖了前端和后端的大部分常用技术,包括Spring Boot、Spring MVC、Mybatis、Mybatis-Plus、Shiro(身份认证与资源授权跟会话等等)、Spring AOP、防止XSS攻击、防止SQL注入攻击、过滤器Filter、验证码Kaptcha、热部署插件Devtools、POI、Vue、LayUI、ElementUI、JQuery、HTML、Bootstrap、Freemarker、一键打包部署运行工具Wagon等等,如下图所示: 课程内容与收益: 总的来说,本课程是一门具有很强实践性质的“项目实战”课程,即“企业应用员工角色权限管理平台”,主要介绍了当前企业级应用系统中员工、部门、岗位、角色、权限、菜单以及其他实体模块的管理;其中,还重点讲解了如何基于Shiro的资源授权实现员工-角色-操作权限、员工-角色-数据权限的管理;在课程的最后,还介绍了如何实现一键打包上传部署运行项目等等。如下图所示为本权限管理平台的数据库设计图: 以下为项目整体的运行效果截图: 值得一提的是,在本课程中,Debug也向各位小伙伴介绍了如何在企业级应用系统业务模块的开发中,前端到后端再到数据库,最后再到服务器的上线部署运行等流程,如下图所示:
©️2020 CSDN 皮肤主题: 猿与汪的秘密 设计师:白松林 返回首页