是一个平台独立的,低耦合的,自包含的、基于可编程的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);
}