创建一个WebServices应用程序 (在.Net Framework 3.5及以下版本中可以直接选择创建一个ASP.NET Web服务应用程序,但是在.ASP.NET Framework4及以上版本里面没有ASP.NET Web服务应用程序,所有我们需要先创建一个ASP.NET 空Web应用程序,然后在这个应用程序中添加新项,选择Web服务(ASMX)就可以了)
例如你的.NET Framework版本等于或低于3.5 可以按下图中的方式来创建一个WebServices项目
但是如果你的.NET Framework版本等于或高于4 则可以按照以下方式来创建一个WebServices项目
然后在这个空Web应用程序里添加“新建项”,选择Web服务(ASMX)
以下是WebServices的原理图解
客户端调用WebServices的形式是当在客户端添加服务引用的时候它按照你给的服务引用的地址在后面加一个?WSDL 例如你填写的服务引用地址是http://localhost:28511/GetMenu.asmx它会去通过HTTP请求读取http://localhost:28511/GetMenu.asmx?WSDL这个文件,然后在通过反射本地生成一个当前语言版本的代理类文件,再进行请求的
(java调用WebServices生成java语言版本的代理类,Asp.net调用WebService生成C#语言版本的代理类)
WebServices:是微软的分布式开发框架,实现了SOA标准
WebServices:由两个部分组成:
1、SOAP协议 (它是Web Services之间的基本通信协议,)
2、元数据WSDL (它的作用就是给客户端生成代理类的一个描述信息)
WebServices:的通讯数据格式是XML(XML可以穿透防火墙,它是一种超文本数据格式,防火墙不会阻止它)
[HTTP只负责把数据传送过去,不会管这个数据是XML、HTML、图片、文本文件或者别的什么。而SOAP协议则定义了怎么把一个对象变成XML文本,在远程如何调用等,怎么能够混为一谈。
这样说两种协议:
HTTP就是邮局的协议,他们规定了你的信封要怎么写,要贴多少邮票等。。。。
SOAP就是你们之间交流的协议,负责把你所需要表达的意思写在信纸上,同时也负责让对方能够看得懂你的信。
http基于文本,soap基于XML
]
实例
WEB.WebServices服务下的GetMenu.asmx文件内容
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
namespace WEB.WebServices
{
/// <summary>
/// WebService1类上的特性标签只需要将Namespace修改成自己公司的域名即可,其他的两个可以不用修改
/// </summary>
[WebService(Namespace = "http://tempuri.org/")] //标记这个WebServices的命名空间(Namespace = "http://一般情况下这里是改成自己公司的域名.org/"),不改也行)
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] //WebServices的绑定方式 (一般不需要改,默认就是BasicProfile1_1,表示最基本的绑定)
[System.ComponentModel.ToolboxItem(false)] //false表示这个WebServices不能做为工具箱中的控件 (一般也不需要改)
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。
// [System.Web.Script.Services.ScriptService]
public class GetMenu : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "菜单";
}
[WebMethod]
public List<Menu> GetTopMenu()
{
return new List<Menu>()
{
new Menu{ Mid=1, Name="双菜鱼头", price=28},
new Menu{ Mid=1, Name="香辣虾", price=26},
new Menu{ Mid=1, Name="小炒肉", price=15}
};
}
}
public class Menu
{
public int Mid { get; set; }
public string Name { get; set; }
public Decimal price { get; set; }
}
}
WebClient客户端下的WebForm1.aspx页面后台类内容
首先需要在客户端添加对WebServices的服务引用。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebClient
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
WS1.GetMenuSoapClient gmsc=new WS1.GetMenuSoapClient();
GridView1.DataSource = gmsc.GetTopMenu();
GridView1.DataBind();
}
}
}
结果