WebService
是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的交互操作的应用程序
WebService:寄宿在IIS,也就是必须在网站项目
五大对象
- Http传输信道,A服务器到B服务器,数据是什么格式传递的
- XML的数据格式---Http传输解析得到的有用数据
- SOAP协议---封装格式:在分布式的环境中,描述了如何做数据交换的一个轻量级协议
- WSDL:属于webservice的标配,标准化描述服务,方便调用
- 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
转载于:https://www.cnblogs.com/zuowj/p/4981919.html
付费内容,请联系本人QQ:1002453261
本文来自博客园,作者:明志德道,转载请注明原文链接:https://www.cnblogs.com/for-easy-fast/articles/12490811.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析