今天因为项目需要使用服务引用,就按之前的经验添加上了,步骤如下:
项目根目录——引用——右键——添加服务引用——高级——添加Web引用——输入接口的URL地址——回车(下方出现的就是接口的定义的方法)——修改Web引用名——添加引用。
按照上面的步骤就可以将引用添加到Web References文件夹下,这也是以往经验,但是具体使用时发现添加的是Web Reference并不能满足项目的需要,这里需要用的是Service Reference。在这之前也查过很多文章,大多数都说是两者没有什么大的区别,主要是Service Reference适用的.net版本更高,而且可以使用WCF。那么两者到底有什么区别呢?
一、Web Reference生成的代理可以被.net1.1或.net2.0的客户端调用;Service Reference生成的代理只能被.net3.0+的客户端调用。
二、Web Reference不能使用WCF(上面已经提到,原因是WCF需要.net3.0的支持);Service Reference则可以使用WCF(当然需要3.0+的客户端)。
三、Web Reference是由wsdl.exe生成客户端代理的,生成webservice代理类的方法,即从System.Web.Services.Protocols.SoapHttpClientProtocol派生而来,代理类代码可以指定要访问的URL属性;Service Reference是由svcutil.exe生成客户端代理的,按照新的webservice客户访问机制WCF(不是直接从System.Web.Services.Protocols.SoapHttpClientProtocol派生而来。)代理类代码没有URL属性可指定,而是在客户端的配置文件app.config中指定endpoint来访问指定的url。
那么如何添加Service Reference呢,步骤与文章开头类似,具体如下:
项目根目录——引用——右键——添加服务引用——输入地址——转到(下方会出现服务与操作两个小窗口,服务是代理类名称,操作是代理类中定义的可调用方法)——修改命名空间——确定。
与添加Web Reference不同的是没有点击“高级”按钮,高级中添加的Web Reference是.net2.0版本的引用方式,是为了兼容性才保留下来。
msdn解释:若要调用 Web 服务的方法,应调用生成的 Web 服务代理类的对应方法。 生成的代理类执行对 Web 服务方法的 Web 请求。
【注意】
要使启用 AJAX 的 ASP.NET 应用程序从脚本调用 Web 服务,必须配置该应用程序注册所需的 ASP.NET HTTP 处理程序。
您调用的 Web 服务必须是 .asmx 文件,并且必须使用 ScriptServiceAttribute 特性限定。 从脚本调用的各个方法必须使用 WebMethodAttribute 特性限定。 不带此特性的方法不在代理类中公开。
以上是服务引用的步骤及相关知识,下面看下如何在一个站点添加服务接口:
服务要建在web层,在web层或任选一个文件夹右键——添加——新建项——选择web服务(注意文件是以 .asmx为后缀)
下面是一个小例子:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Data;
namespace DemoWeb.API
{/// <summary>/// WSVerify 的摘要说明/// </summary>[WebService(Namespace = "http://www.*****.com/")][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)][System.ComponentModel.ToolboxItem(false)]// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。// [System.Web.Script.Services.ScriptService]public class WSVerify : System.Web.Services.WebService{[WebMethod(EnableSession = true)]public DataTable GetLoginUserId(string username, string password){//检查用户是否登录DataTable dt = new BLL.company().GetUserByUsernamePwd(username, password);return dt;}}
}
其中WebMehodAttribute封闭类无法被继承,向使用 ASP.NET 创建的 XML Web services 中的某个方法添加此特性后,就可以从远程 Web 客户端调用该方法。否则无法调用。