Web Service学习笔记(2)

简介:

创建一个简单的Web Service

上一章节中提到Web Service与网页的相似之处,这里在总结下:

1。由和通用语言运行时完全实现,包含面向对象架构,所有基类,还有一些特性,如缓存、状态和数据访问

2。几乎一致的文件和代码结构

3。所有源代码文件都是普通文本

4。vs完全支持,可以使用vs十分便捷的编辑、调试

5。使用一个基于普通文本的配置文件和vs的网站管理工具做全局或者应用程序级配置。

Web Service没有界面,它只有方法,有一些事支持从客户端远程调用的。Web Service文件的后缀名为asmx。

在Web Service应用程序第一次运行时,如果Web Service是人工编译的,并且被放在虚拟跟目录的bin目录下,那么代码隐藏对于内联编码有性能优势,因为asmx文件在Web Service运行时都会被编译成一个类。而ASP.NET 2.0在默认情况下没有这一优势,因为ASP.NET 2.0 把源代码放在App_Code目录下,并且在第一个使用时编译。

下面是一个实例(股票跟踪,不使用数据库,只是为了演示,故使用二维数组)

这个Web Service提供两个方法:

GetName:参数是一个StcokSymbol对象,返回一个字符串,内容是股票名称

GetPrice:参数是一个StcokSymbol对象,返回一个数字,表示当前股票的价格

我使用的是vs2010,

首先新建一个项目(WebSite也可以),注意选择.NET Framework 3.5,默认4是没有Web Service选项的。选择ASP.NET Web Service Application,命名为StockWebService,如图

我们可以看到,vs自动为我们生成了一些代码:


 
 
  1. /// <summary> 
  2. /// Summary description for Service1  
  3. /// </summary> 
  4. [WebService(Namespace = "http://tempuri.org/")]  
  5. [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]  
  6. [System.ComponentModel.ToolboxItem(false)]  
  7. // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.   
  8. // [System.Web.Script.Services.ScriptService]  
  9. public class Service1 : System.Web.Services.WebService  
  10. {  
  11. [WebMethod]  
  12. public string HelloWorld()  
  13. {  
  14. return "Hello World";  
  15. }  
  16. }  
在Service类中,有一个名为HelloWorld的模板方法,它将返回一个字符串。这个方法使用WebMethod特性做修饰,表示该方法对Web Service使用程序可用。WebMethod特性会在后面解释。
 
按F5运行程序,可以看到如图所示

添加以下方法


 
 
  1. [WebMethod]  
  2.  
  3. public double GetPrice(string stockSymbol)  
  4. {  
  5. for (int i = 0; i < stocks.GetLength(0); i++)  
  6. {  
  7. if (string.Compare(stockSymbol, stocks[i, 0], true) == 0)  
  8. return Convert.ToDouble(stocks[i, 2]);  
  9. }  
  10. return 0;  
  11. }  
  12. [WebMethod]  
  13. public string GetName(string stockSymbol)  
  14. {  
  15. for (int i = 0; i < stocks.GetLength(0); i++)  
  16. {  
  17. if (string.Compare(stockSymbol, stocks[i, 0], true) == 0)  
  18. return stocks[i, 1];  
  19. }  
  20. return "Symbol not found.";  
重新运行项目,发现多了两个方法调用的入口。
 
Web Service指令
普通的.aspx文件把Page指令作为第一行代码,而Web Service则有一个WebService指令(直接在vs不能看到,可以找到文件Service1.asmx右击编辑):
<%@ WebService Language="C#" CodeBehind="Service1.asmx.cs" Class="StockWebService.Service1" %>
Language:指定 Web Service中使用的语言,不是必需的
Class:指定Web Service的类名称,必需的
CodeBehind:如果这个类没有包含在Web Service文件的代码中,且类没有被手工编译并放在bin子目录下,WebService指令的CodeBehind属性则用于指定实现WebService类的源代码文件的名称。
Debug:如果设为true,将以启用调试的方式编译Web Service。默认为false

 

从WebService类继承

虽然是可选选项,但是它有几个优点,主要优点是可获得对ASP.NET几个常见对象的访问权:

Application对象和Session对象(状态管理)、User对象(验证Web服务器调用者的身份)、Context对象(可以访问HttpContext类中调用者请求的所有特定HTTP信息)

当然也不可不继承WebService类,可能是为了克服来自.NET Framework的限制。

通过HttpContext控制Application状态

Web Service可通过HttpContext控制Application对象(也可以访问所有的ASP.NET资源)

例:在Service1.asmx.cs中添加如下方法:


 
 
  1. /// <summary> 
  2. /// set exchange of stock  
  3. /// </summary> 
  4. /// <param name="exchange"></param> 
  5. [WebMethod]  
  6. public void SetStockExchange(string exchange)  
  7. {  
  8. Application["exchange"] = exchange;  
  9. }  
  10. [WebMethod]  
  11. public string GetStockExchange()  
  12. {  
  13. return Application["exchange"].ToString();  

WebServiceBinding特性

Web Service描述语言(WebServices Description Language,WSDL)定义的绑定可作为.NET类访问WebService的接口。即绑定会定义一系列操作。一个WebService类有一个默认的绑定,它包含该类的所有Web方法,该类不存在与非默认绑定的关联。WebServiceBinding特性用于识别非默认绑定。WebService类可以具有多个WebServiceBinding特性,每一个都可以指定不同的绑定。如果Name属性被忽略,那个这个特性将指定默认绑定。

属性 类型 说明
ConformsTo WsiProfiles 绑定需要遵守的WS-1标准
EmitConformanceClaims Boolean 如果为true,当WSDL描述时,绑定会发出遵守的声明
Location String 定义绑定的位置,默认值为当前Web Service的URL
Name String 绑定名称
Namespace String 与绑定关联的命名空间

 

 

 

 

 

 

WebMethod特性


 

Web Service由WebService类定义的,对于WebService类而言,并不需要将所有的方法提供给Web Service使用者。对需要提供的方法,须:

1。声明为public

2。在方法声明之前设置WebMethod特性(即加上[Web Service])

WebMethod包含一些属性,用于设定web方法的行为。语法:[WebMethod(PropertyName=value)],以下是一些属性的说明

BufferResponse:默认情况下,ASP.NET在从服务器端向客户端发送响应之前,会对整个响应进行缓存。多数情况下,这是最好的做法。但是,如果响应非常长,那么需将 它设为false类禁用缓存,如果设为false,则返回到客户端的响应时16kb的块。默认值为true

CacheDuration:如同网页,Web Service也能够把返回到客户端的结果进行缓存(有点:如果客户端发出的请求与由另一个客户端发出的请求完全一致是,那么服务器就返回缓存中的响应,可以改善性能)。CacheDuration定义第一次请求之后的多少秒内,会在响应中将缓存页被发送给随后的请求。一旦缓存过期,则发送新页面给请求。默认值为0,即禁用结果缓存。如果web'方法返回的数据没有改变(如:从一小时更新一次数据库中获取数据的查询),那么就可以设置结果缓存为一个合适的时间,例如1800(30分钟)。令一方面,如果返回的数据是动态的,那么需要设置缓存持续时间较短或干脆禁用。如果Web Service没有一个相对有限的参数范围,缓冲也不适合使用。

Description:对web方法的描述,字符串类型

EnableSession:默认为false。如果设为true,web方法将启用会话状态。如果设为ture且Web Service继承自WebService类,那么会话可以使用WebService.Session。允许会话状态为应用程序增加了额外的开销。

MessageName:在C#类中,方法可以拥有相同的名字(重载),Web Service禁止使用重载。WebMethod特性的MessageName属性可以消除由多个相同名称造成的无法识别的问题。它允许对每一个方法的重载使用唯一的别名。当重载方法在SOAP消息中引用时,SOAP消息将使用MessageName而非方法的名称。

TransactionOption:ASP.NET web方法可以使用事务,但是仅当事件在web方法中初始化时可以使用。TransactionOption属性用于设置web方法是否启动一个事务。然而,因为web方法的事务必须为根对象,所有只有两个不同的行为,启用一个新对象(Required、RequiresNew)或者不启动(Disabled、NotSupported、Supported)。如果在Web Service中启用事务,需:1。添加System.EnterpriseServices.dll引用 ;2。添加命名空间(using System.EnterpriseServices;);3。向WebMethod特性添加TransactionOption属性,并设置为Required(或RequiresNew)




    本文转自xshf12345 51CTO博客,原文链接:http://blog.51cto.com/alexis/573720,如需转载请自行联系原作者



相关文章
|
4月前
【Azure 应用服务】Web App Service 中的 应用程序配置(Application Setting) 怎么获取key vault中的值
【Azure 应用服务】Web App Service 中的 应用程序配置(Application Setting) 怎么获取key vault中的值
|
2月前
|
计算机视觉 Python
Flask学习笔记(六):基于Flask的摄像头-web显示代码(可直接使用)
这篇文章是关于如何使用Flask框架结合OpenCV库,通过电脑摄像头实现视频流在网页上的实时显示,并提供了单摄像头和多摄像头的实现方法。
89 2
Flask学习笔记(六):基于Flask的摄像头-web显示代码(可直接使用)
|
27天前
【Azure App Service】PowerShell脚本批量添加IP地址到Web App允许访问IP列表中
Web App取消公网访问后,只允许特定IP能访问Web App。需要写一下段PowerShell脚本,批量添加IP到Web App的允许访问IP列表里!
|
2月前
|
文件存储 Python
Flask学习笔记(一):Flask Web框架
本文介绍了Flask Web框架的基本概念、安装方法、初始化参数、程序编写、静态文件显示和配置信息加载等基础知识。
27 0
|
4月前
|
关系型数据库 MySQL Linux
【Azure 应用服务】在创建Web App Service的时候,选Linux系统后无法使用Mysql in App
【Azure 应用服务】在创建Web App Service的时候,选Linux系统后无法使用Mysql in App
【Azure 应用服务】在创建Web App Service的时候,选Linux系统后无法使用Mysql in App
|
4月前
|
Shell PHP Windows
【Azure App Service】Web Job 报错 UNC paths are not supported. Defaulting to Windows directory.
【Azure App Service】Web Job 报错 UNC paths are not supported. Defaulting to Windows directory.
|
4月前
|
Linux 应用服务中间件 网络安全
【Azure 应用服务】查看App Service for Linux上部署PHP 7.4 和 8.0时,所使用的WEB服务器是什么?
【Azure 应用服务】查看App Service for Linux上部署PHP 7.4 和 8.0时,所使用的WEB服务器是什么?
|
4月前
【Azure 应用服务】通过 Web.config 开启 dotnet 应用的 stdoutLog 日志,查看App Service 产生500错误的原因
【Azure 应用服务】通过 Web.config 开启 dotnet 应用的 stdoutLog 日志,查看App Service 产生500错误的原因
|
4月前
|
Linux Python
【Azure 应用服务】Azure App Service For Linux 上实现 Python Flask Web Socket 项目 Http/Https
【Azure 应用服务】Azure App Service For Linux 上实现 Python Flask Web Socket 项目 Http/Https
|
4月前
|
存储 安全 网络安全
【Azure 环境】使用Azure中的App Service部署Web应用,以Windows为主机系统是否可以启动防病毒,防恶意软件服务呢(Microsoft Antimalware)?
【Azure 环境】使用Azure中的App Service部署Web应用,以Windows为主机系统是否可以启动防病毒,防恶意软件服务呢(Microsoft Antimalware)?
下一篇
无影云桌面