1. WebService
SOAP、WSDL、UDDI
SOAP(Simple Object Access Protocal,简单对象访问协议),是在分散或在分布式环境中交换信息的简单协议。
WSDL(Web Services Description Language,Web服务描述语言) 对WebService 的解释说明文档,描述Web服务发布的XML格式
UDDI 统一描述、发现和集成(Universal Description, Discovery, and Integration)的缩写,是Web服务的黄页,它是一个基于XML的跨平台的描述规范,可以使世界范围内的企业在互联网上发布自己所提供的服务供其他客户查询使用。
WebService工作原理:客户端向服务器段发出调用请求,发出一个SOAP消息;服务端对这SOAP消息处理后返回结果;基于SOAP协议。
优点:跨语言、跨平台、不局限于局域网和广域网、分布式异地调用。 SOAP协调使用通过HTTP 和 XML(文本语言) 进行通信
缺点:传输的数据量过大、冗余数据过多、速度感觉延迟。
Web Service :是可互操作的分布式应用程序 Web Service :使用 HTTP 和 XML 进行通信 Web Service :可以穿越防火墙,真正实现自由通信 通过 SOAP 实现异地调用 默认 80 端口
Web Service(Web 服务)提供以下属性。
Namespace:默认是"http://tempuri.org/",此属性的值包含 XML Web Service 的默认命名空间。XML 命名空间提供了一种在 XML 文档中创建名称的方法,该名称可由统一资源标识符(URI)标识。使用XML命名空间,可以唯一标识XML文档中的元素或属性因而,在 XML Web Service 的服务说明中,Namespace 被用做与 XML Web Service 直接相关的XML 元素的默认命名空间。如果不指定命名空间,则使用默认命名空间http://tempuri.org/。
Name:此属性的值包含 XML Web Service 的名称。在默认情况下,该值是实现 XML Web Service 的类的名称。
Description:此属性的值包含描述性消息,此消息将在 XML Web Service 的说明文件(例如服务说明和服务帮助页)生成后显示给 XML Web Service 的潜在用户。
WebMethod(Web 服务方法)有以下 6 个属性。
Description:是对 Web Service 方法的描述信息。就像 Web Service 方法的功能注释,可以让调用者看见的注释。
EnableSession:指示 Web Service 是否启动 Session 标志,主要通过 Cookie 完成,默认为 false。
MessageName:主要实现方法重载后的重命名:
TransactionOption:指示 Web Service 方法的事务支持。
CacheDuration:设置响应应在缓存中保留的秒数。这样 Web Service 就不需要重复执行多遍,可以提高访问效率,而 CacheDuration 就是指定缓存时间的属性。
简单代码实现如下:
using System; using System.Collections.Generic; using System.EnterpriseServices; using System.Linq; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; namespace TestWebService1 { /// <summary> /// WebService1 的摘要说明 /// </summary> [WebService(Namespace = "http://yxl.org/",Name="MyWebService",Description="我的webservice")] [WebServiceBinding(ConformsTo = WsiProfiles.None)] [System.ComponentModel.ToolboxItem(false)] // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 // [System.Web.Script.Services.ScriptService] public class WebService1 : System.Web.Services.WebService { public MySoapHeader myHeader; [SoapHeader("myHeader")] [WebMethod( MessageName = "GetTime")] public string GetTime() { if (!myHeader.IsValid()) { return "对不起,您没有权限访问"; } return DateTime.Now.ToString(); } [WebMethod(Description="获取所有的学生",EnableSession=false,TransactionOption=TransactionOption.Required,CacheDuration=10)] public List<Student> GetStudent() { return new List<Student>() { new Student() {Id = 1, Name = "张三1"}, new Student() {Id = 2, Name = "张三2"}, new Student() {Id = 3, Name = "张三3"} }; } [WebMethod(Description = "获取所有的学生1", EnableSession = false,MessageName="GetStudent2")] public List<Student> GetStudent(string name) { return new List<Student>() { new Student() {Id = 1, Name = "张三1"}, new Student() {Id = 2, Name = "张三2"}, new Student() {Id = 3, Name = "张三3"} }; } } public class Student { public int Id { get; set; } public string Name { get; set; } } public class MySoapHeader : SoapHeader { public string UserName { get; set; } public string Password { get; set; } public bool IsValid() { if (UserName == "admin" && Password == "123") { return true; } else { return false; } } } }
发布后调用实现如下:
using ShowStudentInfo.ServiceReference1; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace ShowStudentInfo { public partial class _Default : Page { protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack){ loadInfo(); } } public void loadInfo() { using (MyWebServiceSoapClient client = new MyWebServiceSoapClient()) { //Student[] students = client.GetStudent(); //foreach (var student in students) //{ // Response.Write(student.Name + "</br>"); //} //Response.Write("<hr/>"); MySoapHeader myHeader = new MySoapHeader(); myHeader.UserName = "admin"; myHeader.Password = "123";//用户名和密码要和调用的Web Service 一致 Response.Write(client.GetHello(myHeader)); } } } }