Web Service特点:
1、基于Socap协议完成,xml格式;
2、基于HTTP协议传输
3、Soap协议封装
使用WebService的关键点:
1、需要启动Web Service
2、在客户端中将Web Service地址添加到服务引用
具体流程:
1、创建ASP.NET WEB程序:
2、选择空项目
3、在创建完项目后,右键添加新建项目,选择Web服务(ASMX)
4、此处我将他命名为MyFirstWebService,然后点击该文件查看代码:
5、如上图所示,每个方法里上方均添加了[WebMethod]特性,只有标记了该特性才能被客户端及在页面中展示。接着我们选中该文件(MyFirstWebService)并右键选择 在浏览器中查看
6、此时将该程序将在网页上展示,可以看到标记了[WebMethod]的方法HelloWorld在页面中展示着。
7、接着我们继续创建客户端程序,在此例中创建了一个控制台程序,并右键添加服务引用
8、接着将启动的WebService网页地址复制到服务引用上,然后点击转到,最后设置命名空间
9、接着我们编写在控制台下访问WebService程序:
using (MyWebService.MyFirstWebServiceSoapClient client = new
MyWebService.MyFirstWebServiceSoapClient())
{
string str = client.HelloWorld();
Console.WriteLine(str);
Console.ReadLine();
}
10、启动运行,可以看到输出结果:
针对Web Service的权限认证,可以使用SoapHeader完成校验,具体如下:
1、在服务端自定义一个类,该类继承于 SoapHeader。
public class CustomSoapHeader: SoapHeader
{
public string UserName { get; set; }
public string UserPwd { get; set; }
public CustomSoapHeader()
{
}
/// <summary>
/// 如果为有参数构造方法,需要手动实现一个无参数构造方法,否则将报:无法序列化,因为它没有无参数的构造函数问题
/// </summary>
/// <param name="i"></param>
public CustomSoapHeader(int i)
{
}
public bool Validate()
{
if(UserName.Equals("yunn")&&UserPwd.Equals("123"))
return true;
return false;
}
}
2、接着在Web Service下需要添加一个属性,该属性类型为刚刚定义的类。创建一个GetValidateResult方法,该方法将由客户端调用已完成权限验证。这里需要注意的是该方法除了需要标记[WebMethod]特性外,还需标记SoapHeader特性,该特性需要传入定义的属性名称CustomSoap
public class MyCustomSoaper : System.Web.Services.WebService
{
public CustomSoapHeader CustomSoap { get; set; }
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
[WebMethod]
[SoapHeader("CustomSoap")]
public string GetValidateResult()
{
if (CustomSoap.Validate())
{
return $"{CustomSoap.UserName} 验证通过";
}
else
return $"{CustomSoap.UserName} 密码错误";
}
}