刘俊的读书笔记

博客园 首页 联系 订阅 管理

  Web Service(Web 服务)提供以下属性。 z Description:此属性的值包含描述性消息,此消息将在 XML Web Service 的说明文 件(例如服务说明和服务帮助页)生成后显示给 XML Web Service 的潜在用户。

  1、Name:此属性的值包含 XML Web Service 的名称。在默认情况下,该值是实现 XML Web Service 的类的名称。

  2、Namespace:此属性的值包含 XML Web Service 的默认命名空间。XML 命名空间 提供了一种在 XML 文档中创建名称的方法,该名称可由统一资源标识符(URI) 标识。使用XML命名空间,可以唯一标识XML文档中的元素或属性。因而,在 XML Web Service 的服务说明中,Namespace 被用做与 XML Web Service 直接相关的 XML 元素的默认命名空间。如果不指定命名空间,则使用默认命名空间 http://tempuri.org/。

  以下示例代码说明了 Web Service 属性的用法:

    // //Service1 的摘要说明 //

    [WebService(

      Namespace = "http://tempuri.org/",

      Description = "接口的描述说明文字-测试。",

      Name = "LTPService"

    )]//Web Service 的名称

    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

    [ToolboxItem(false)]

  WebMethod(Web 服务方法)有以下 6 个属性。

  1、Description:是对 Web Service 方法的描述信息。就像 Web Service 方法的功能注释, 可以让调用者看见的注释。

  [WebMethod(Description="根据产品编号查询产品的价格")]

  public string GetProductPrice2(string ProductId)

  {

    Products pro = new Products();

    return pro.GetPrice(ProductId);

  }

  2、EnableSession:指示 Web Service 是否启动 Session 标志,主要通过 Cookie 完成, 默认为 false。

  public static int i = 0;

  [WebMethod(EnableSession = true)]

  public int Count()

  {

    i = i + 1;

    return i;

  }

  3、MessageName:主要实现方法重载后的重命名:

  public static int i = 0;

  [WebMethod(EnableSession = true)]

  public int Count() { i = i + 1; return i; }

  [WebMethod(EnableSession = true, MessageName = "Count1")]

  public int Count(int da) { i = i + da; return i; }

  通过 count 访问的是第 1 个方法,而通过 count1 访问的是第 2 个方法。

  4、TransactionOption:指示 Web Service 方法的事务支持。

  由于 HTTP 协议的无状态特性,Web Service 方法只能作为根对象参与事务。如果 COM 对象与 Web Service 方法参与相同的事务,并且在组件服务管理工具中被标记为在事务内运 行,则Web Service方法可以调用这些COM对象。如果一个TransactionOption属性为Required 或 RequiresNew 的 Web Service 方法调用另一个 TransactionOption 属性为 Required 或 RequiresNew 的 Web Service 方法,则每个 Web Service 方法将参与它们自己的事务,因为 Web Service 方法只能用做事务中的根对象。如果异常是从 Web 服务方法引发的或未被该方 法捕获,则自动放弃该事务。如果未发生异常,则自动提交该事务,除非该方法显式调用 SetAbort。

  ①Disabled

  指示 Web Service 方法不在事务的范围内运行。当处理请求时,将在没有事务的情况下 执行 Web Service 方法。

  [WebMethod(TransactionOption = TransactionOption.Disabled)]

  ②NotSupported

  指示 Web Service 方法不在事务的范围内运行。当处理请求时,将在没有事务的情况下 执行 Web Service 方法。

  [WebMethod(TransactionOption= TransactionOption.NotSupported)]

  ④Required

  指示 Web Service 方法需要事务。由于 Web 服务方法只能作为根对象参与事务,因此将 为 Web 服务方法创建一个新事务。

  [WebMethod(TransactionOption= TransactionOption.Required)]

  ⑤RequiresNew

  指示 Web Service 方法需要新事务。当处理请求时,将在新事务内创建 Web Service。

  [WebMethod(TransactionOption= TransactionOption.RequiresNew)]

  这里我们来看一个例子。

  首先在类代码中添加引用: using System.EnterpriseServices; ,然后设置属性 TransactionOption = TransactionOption.RequiresNew。

  例如:

  [WebMethod(TransactionOption = TransactionOption.RequiresNew)]

  public int DeleteProduct(string ProductId)

  {

    String deleteCmdSQL = "delete from P_Product where ProductId='" + ProductId + "'";

    String exceptionCmdSQL = "DELETE FROM NonExistingTable WHERE ProductId='" + ProductId + "'";

    SqlConnection sqlConn = new SqlConnection( Maticsoft.DBUtility.PubConstant.ConString);

    sqlConn.Open();

    SqlCommand deleteCmd = new SqlCommand(deleteCmdSQL, sqlConn);

    SqlCommand exceptionCmd = new SqlCommand(exceptionCmdSQL, sqlConn); //这个命令正确执行

    deleteCmd.ExecuteNonQuery(); //这个命令执行时会发生异常,所以,第一个命令会自动回滚。因为这个方法被设置为事务模式 //发生异常时,ASP.NET 会自动中断事务并回滚

    int cmdResult = exceptionCmd.ExecuteNonQuery();

    sqlConn.Close();

    return cmdResult;

  }

  在上面的示例中,如果数据库操作引发异常,则事务将自动中止;否则将提交事务。

  5、CacheDuration:设置响应应在缓存中保留的秒数。这样 Web Service 就不需要重复 执行多遍,可以提高访问效率,而 CacheDuration 就是指定缓存时间的属性。

  public static int i = 0;

  [WebMethod(EnableSession = true, CacheDuration = 30)]

  public int Count() { i = i + 1; return i; }

  IE 的地址栏里输入:http://localhost/WebService1/Service1.asmx/Count?。

  刷新它,内容一样!要使输出不一样,需等 30 秒。因为代码要在 30 秒后才被再次执行, 之前返回的结果都是在服务器高速缓存里的内容。

  有两个问题可以影响 ASP.NET 2.0 Web 服务应用程序中的输出缓存。 在 ASP.NET 2.0 中,测试页的 HTTP 方法已从 Get 更改为 Post。但是 Post 通常不进 行缓存。如果在 ASP.NET 2.0 Web 服务应用程序的测试页中改为使用 Get,则缓存将正 常工作。

  此外,HTTP 指示用户代理(浏览器或调用应用程序)应该可以通过将“Cache-Control” 设置为“no-cache”以重写服务器缓存。因此,当 ASP.NET 应用程序找到“no-cache”标 头时,会忽略缓存的结果。

  6、BufferResponse:配置 Web Service 方法是否等到响应被完全缓冲完才发送信息给请 求端。普通应用要等完全被缓冲完才被发送。

  

posted on 2016-04-12 14:59  刘俊的读书笔记  阅读(130)  评论(0)    收藏  举报