打印

[asp.net教程] 从php迁移到asp.net(2)

从php迁移到asp.net(2)

声明范围
  局部变量是在过程(过程与函数类似)中声明的变量。非局部变量是在过程之外但在类或结构中声明的变量。
   
  在类或结构中,非局部变量的类别取决于该变量是否被共享。使用 shared 关键字声明的变量是共享变量,它只有一个副本并且在类或结构的所有实例中共享。如果不使用 shared 关键字,则该变量为实例变量,并且针对类或结构的每个实例都将创建一个单独的变量副本。实例变量的给定副本仅可用于为之创建该副本的实例。
   
  变量的范围是指可以引用它而不必限定其名称的所有代码集。变量的范围取决于声明变量的位置。位于给定区域中的代码可以使用在该区域中定义的变量而不必限定其名称。声明范围时,将遵循以下规则:
   
  共享变量或实例变量的范围是在其中声明了该变量的结构或类。
  局部变量的范围是在其中声明了该变量的过程。
  但是,如果您在块中声明一个局部变量,则它的范围将只限于该块。局部变量在定义它的控制块中处于活动状态。控制块可以是过程、if 语句以及循环语句等。
   
  有关范围的详细信息,请参阅 scope。
   
  声明可访问性
  .net 支持变量的可访问性,从而使开发人员可以控制哪些代码能够访问特定的变量。例如,如果要为某个公式设置一些常数,并且要确保这些常数不会被它们所在类以外的其他代码更改,则可以使用 private 按如下所示声明该变量:
   
  private myconstant as integer
  变量的可访问性由声明语句中使用的一个或多个关键字 dim、public、protected、friend、protected friend 或 private 确定。开发过程中通常只使用 public 和 private。
   
  您可以使用上述任意关键字来声明模块、结构、类或实例变量。过程中只允许使用 dim 关键字,并且可访问性始终为 private。
   
  输出
  php 中输出数据的典型方式是使用 echo() 语言构造。asp.net 中与此最相似的是 response.write() 方法(或 <%= %> 构造,它只是 response.write() 的简写形式)。表 4 显示了向页面写入值的基本语法。
   
  表 4:基本输出
   
  php visual basic .net
  <?php
  $hello = hi how are you\n;
   
  echo $hello;
   
  ?
   
  >
   <%
  dim hello as string = hi how are you & vbcrlf
   
  response.write(hello)
   
  %>
   
   
  然而,这些用于向浏览器发送输出的方法主要是为了保持与传统 asp 的向后兼容性。asp.net 提供了新的基于控件且面向事件的模型,您只需在服务器控件上设置属性即可将数据输出到浏览器中。通过这种技术可以将布局与代码清楚地分开,从而简化了维护工作,并且在复杂情况下所需的代码要比 php 少得多。
   
  <script language=vb runat=server>sub page_load(sender as object, e as eventargs) thedate.text = datetime.now end sub</script>the current date is: <asp:label id=thedate runat=server/>
  此示例声明了一个名为 thedate 的服务器端标签 (label) 控件,并在该页面的 load 事件中将此标签的 text 属性设置为当前的日期和时间。此代码的 html 输出与其他两个版本相同,不同的是 label 控件将自身呈现为 span 标记(其中包含所设置的任何标签文本)。
   
  条件处理
  if/else
  php 具有若干条件处理表达式,例如 for、while、switch 和 foreach,但最常用的是 if/else 表达式。visual basic .net 有几个非常类似的构造,其语法也很类似。表 5 对 php 和 visual basic .net 中的等价条件逻辑进行了比较。
   
  表 5:基本条件逻辑
   
  php visual basic .net
  if ($a > $b) {
  print a is bigger than b;
   
  } elseif ($a == $b) {
   
  print a is equal to b;
   
  } else {
   
  print a is smaller than b;
   
  }
   if a > b
  response.write (a is bigger
   
  than b)
   
  elseif a = b then
   
  response.write (a is equal to
   
  b)
   
  else
   
  response.write (a is smaller
   
  than b)
   
  end if
   
   
  切换
  切换语句是大多数编程语言的常见语言构造,用于通过多个值对单个表达式进行测试。它常用于替换包含多个 elseif/else 块的 if 语句。
   
  图 6 对 php 的 switch 语句与 visual basic 的 select case 语句进行了比较。
   
  表 6:switch 与 select case 语句的对比
   
  php visual basic .net
  switch ($i) {
  case 0:
   
  print i equals 0;
   
  break;
   
  case 1:
   
  print i equals 1;
   
  break;
   
  case 2:
   
  print i equals 2;
   
  break;
   
  default:
   
  print i is not equal to 0,
   
  1 or 2;
   
  }
   select case number i
  case 0
   
  description = 0
   
  response.write (i equals 0)
   
  case 1
   
  description = 1
   
  response.write (i equals 1)
   
  case 2
   
  description = 2
   
  response.write (i equals 2)
   
  case else
   
  description = i is not equal
   
  to 0, 1 or 2
   
  response.write (i is not
   
  equal to 0, 1 or 2 )
   
  end select
   
   
  循环
  另一个非常常见的控制构造是循环。php 和 .net 都支持若干不同的常见循环类型。
   
  表 7:for 循环
   
  php visual basic .net
  for ($i = 1; $i <= 100; $i++) {
  print $i;
   
  }
   dim sum as integer = 0
  dim counter as integer
   
  for counter = 1 to 100 step 5
   
  sum += counter
   
  next
   
  for i = 1 to 100
   
  response.write (i)
   
  next i
   
   
  在 visual basic 中,这种循环类型被称为 for...next 循环,而在 php 中则称为 for 循环。在此示例中,我们使用了 += 运算符作为 sum = sum + counter 的简写方式。在 php 中,可以使用 break; 语句来中断循环。而 for...next 循环可以通过 exit for 语句中断。
   
  条件循环
  只要某个条件计算为 true,条件循环便会持续重复一组指令。表 8 显示了这两种语言中的基本条件循环示例。
   
  表 8:条件循环
   
  php visual basic .net
  $i = 1;
  while ($i <= 10):
   
  print $i;
   
  $i++;
   
  endwhile;
   dim counter i as integer = 1
  do while counter i <= 10
   
  response.write(i)counter i += 1
   
  loop
   
   
  在 visual basic 中,这种循环类型称为 do...loop 语句,或 while 循环。php 也支持 do...while 循环,该循环与 while 循环非常类似,不同之处在于它是在每个循环的结尾而不是开始检查真假表达式。 do...while 循环与常规 while 循环的主要差别是前者会确保运行第一个循环(因为只在该循环的结尾检查真假表达式),而常规的 while 循环则不一定运行。(因为它在每个循环的开始检查真假表达式,如果它一开始便计算为 false,该循环将立即结束执行。)
   
  下面给出了一个 php 中这种情况的示例:
   
  $i = 0;do { print $i;} while ($i>0);
  此循环只运行一次,因为在第一次循环后检查真假表达式时,表达式计算为 false($i 不大于 0),所以循环将停止执行。
   
  在 visual basic .net 中,您可以执行同样的操作:
   
  dim counter i as integer = 0do response.write (i)counterloop while counter i > 0
  但是,visual basic .net 支持内置的循环功能,这是 php 所不支持的。该功能将对条件进行计算,直到条件为真时为止。
   
  foreach 循环
  php 4(而非 php 3)包含一个 foreach 构造,它与 asp.net 以及某些其他语言中的构造非常类似。它只是为循环数组提供了一个简单的途径。foreach 只适用于数组,如果试图将其用于其他数据类型的变量或未初始化的变量,则会导致错误。visual basic .net 中与此等价的循环是 for each...next 语句。表 9 显示了在这两种语言中循环数组的示例。
   
  表 9:foreach 循环
   
  php visual basic .net
  $i = 0;
  foreach($a as $v) {
   
  print \$key[$i]$v \n;
   
  $i++;
   
  }
   for each v in a
  response.write a(v) (v & vbcrlf)
   
  next
   
   
  数组
  php 中的数组的功能与 visual basic .net 中的数组的功能截然不同。php 中的数组实际上是关联数组,但是可以像索引或关联数组那样使用。而 visual basic .net 中的数组是索引数组。visual basic .net 不支持关联数组(但您可以自己创建它们,请参阅下面的“集合”)。其他 asp.net 语言支持这些类型的数组,但 visual basic .net 并不支持,这可能给 php 开发人员提出了一个难题,因为他们并不习惯使用这种更常见的索引数组,并且可能会希望在 visual basic .net 中创建关联数组模型。表 10 显示了 php 和 visual basic .net 中的简单数组示例。
   
  表 10:创建数组的示例
   
  php visual basic .net
  $a = array (0,1, 2); dim mysinglearraya() as integer =
  new integer (2) {0,1,2}
   
   
  与其他变量一样,visual basic .net 数组中的变量也是使用 dim 语句声明的。变量名后面带有一对或多对括号,表明它是数组而不是标量(包含单个值的变量)。
   
  创建 visual basic .net 数组时,还必须将其声明为保存特定类型的数据。如果指定的类型是 object(作为 .net 中所有对象类型的基础的普通类型),则此数组可以保存任何类型的数据,但是从数组中检索值时,必须将值转换为原来的类型。
   
  visual basic .net 数组可以是嵌套的数组,也可以是多维数组。visual basic .net 中有许多与 php 相对应的用于处理数组的函数,但有一个例外。由于 visual basic .net 不支持关联数组,因而不存在用于根据数组的“主键”来访问、索引或执行任何操作的函数。visual basic .net 中不存在这样的“主键”。
   
  虽然本文多次提到 visual basic .net 不支持关联数组,但是可以创建集合来代替数组。集合与关联数组有些相似,可以使用集合来解决某些类似的问题。
   
  在某些情况下,将项目存储在集合中要比存储在数组中更有效。
   
  如果要处理一组小型的动态项目,则可以使用集合。要创建集合,只需如下面的示例代码所示声明并实例化一个 collection:
   
  dim mycollection as new collection()
  然后,您可以使用 add 方法向集合中添加成员。在此示例中,我们创建了四个字符串并将它们添加到集合中。您还可以选择添加一个唯一的 string 值作为集合成员的主键。该值作为 add 方法的第二个参数传递给集合。
   
  dim w, x, y, z as stringw = key1x = key2y = key3z = key4mycollection.add(w, 1)mycollection.add(x, 2)mycollection.add(y, 3)mycollection.add(z, 4)
  虽然这看起来类似于在 php 中创建关联数组,但集合是一种截然不同的事物,因为它本身就是一个对象。对于转到 asp 的 php 开发人员,我们建议在尝试在 visual basic .net 中创建关联数组模型之前先了解一下 microsoft 的 visual basic .net language specification。
   
  管理状态
  任何 web 应用程序中都很常见的一个任务就是管理状态,该任务通常是使用 cookie 或应用程序状态管理构造(如 session 变量)来完成的。visual basic .net 具有与 php 类似的用于处理状态的方法。
   
  设置和检索 cookie
  在这两种环境中设置 cookie 都是比较繁琐的。表 11 显示了在这两种语言中编写然后读取 cookie 的示例。
   
  表 11:设置和检索 cookie
   
  php visual basic .net
  <?php
  $value = 'something from
   
  somewhere';
   
  setcookie (testcookie,
   
  $value,time()+3600); /*
   
  expire in 1 hour */
   
  ?>
   
  and to retive the set cookie
   
  <?
   
  echo $_cookie[testcookie];
   
  ?>
   dim value as string = something from
  somewhere
   
  dim mycookie as new httpcookie = new
   
  httpcookie(something from
   
  somewheretestcookie)
   
  dim now as datetime = datetime.now
   
  mycookie.value = now.tostring()value
   
  mycookie.expires = now.addhour(1)
   
  response.cookies.add(mycookie)
   
  'and to retrieve the set cookie
   
  response.write(request.cookies[what we
   
  settestcookie}.value}
   
   
  设置和检索 session 变量
  asp.net 中的 session 变量与 php 中的 session 变量非常类似。这两种环境中的 session 变量都为确保 web 应用程序访问中的一致性提供了相应处理和 cookie 操作。
   
  最重要的一个差别是,当从 asp.net 的 session 对象中检索值时,该值将作为普通的 system.object 类型返回,而这种类型可以保存任何类型的数据。要使用该值,必须先将其重新转换为原来的基本类型。表 12 显示了一些 session 变量的使用示例。
   
  表 12:session 变量的使用
   
  php visual basic .net
  <?php
  session_start();
   
  session_register('today');
   
  $today = getdate();
   
  ?>
   
   
  <?= $today ?>
   session(today) = datetime.now
  dim today as date
   
  today = cdate(session(today))
   
  response.write(today)
   
  response.write (session(today))
   
   
  asp.net 还提供了另一种形式的状态管理,即“应用程序状态”,它与 session 变量类似,但只是在应用程序的生存期中保持一致。这使您可以存储各种内容,例如配置信息或数据库连接字符串。这些内容在应用程序运行期间不会发生变化。
   
  有关此主题的详细信息,请参阅《.net framework development guide》中的 application state 一节。
   
  正则表达式
  asp.net 支持其他正则表达式实现(例如 perl 和 awk 中的正则表达式)的大多数常见功能。这实际上是为了保持与 perl 5 正则表达式兼容。asp.net 还支持其他正则表达式实现中未提供的正则表达式功能,例如从右向左匹配以及实时编译。由于 asp.net 与 perl 正则表达式兼容,并且大多数 php 开发人员都使用了 perl 兼容的正则表达式,因而通常无须将语法从一种形式转换为另一种形式。有关 .net 正则表达式支持的详细信息,请参阅 .net framework regular expressions。
   
  异常处理
  asp.net 框架通过一种人们所熟悉的语言构造 try/catch 提供了结构化的异常处理,从而能够捕获代码中可能出现的异常。php 没有提供此功能,但 php 5 中将添加它。
   
  下面的示例说明了如何在 visual basic .net 中进行异常处理:
   
  try ' 此处是可能导致错误的代码catch e as exceptiontype ' 用于处理错误的代码' 可选:可在此处放置更多 catch 块finally ' 始终执行的代码end try
  要注意的是,try 块可以包含一个或多个 catch 块,或包含一个 finally 块,也可以同时包含两者。也就是说,如果您知道无法更正错误,但仍需要清除某些对象而不管是否发生错误,则可以使用不包含 catch 语句的 try...finally 块。
   
  查询数据库
  在 php 中,通常可以通过两种常见方法访问数据库:使用数据库的特定扩展名或使用独立于数据库的 pear db 库。
   
  在 asp.net 中,可以通过一组称为 ado.net 的对象来访问数据库,这些对象与 pear db 库的功能基本相同。数据库查询实际上是通过一组连接、命令、参数和数据适配器对象完成的。其中的每个对象都有多个版本,具体情况取决于所访问的数据库的类型。例如,有一组对象用于具有 ole-db 驱动程序的数据库(例如 microsoft access),还有一组对象用于具有 odbc 驱动程序而没有 ole-db 驱动程序的数据库。针对 oracle 和 microsoft sql server 也有专门的数据提供者,它们已经过优化,可以分别为每种特定的数据库提供高性能的访问。某些第三方还提供了其他数据库支持,例如 mysql。本节中的示例将使用 sql server 对象,因为它是 asp.net 最常用的数据库。
   
  system.data、system.data.sqlclient 和 system.data.oledb 是用于在 ado.net 中定义数据库访问的命名空间。要使页面能够访问这些类,您需要将 system.data 和 system.data.sqlclient 命名空间导入到页面中。
   
  <%@ import namespace=system.data %><%@ import namespace=system.data.sqlclient %>
  图 13 显示了在这两种语言中执行查询的示例。在 php 中,我们显示了一个使用 pear 的连接,pear 不仅是用于连接 db 的最常用方法之一,但还是与 ado.net 最为类似的方法。
   
  表 13:执行查询
   
  php visual basic .net
  <?php
  //connect
   
  require_once('db.php');
   
  $db=db::connect
   
  (mysql://mydbvie
   
  w:user@localhost/mydb);
   
  if (db::iserror($db)) {
   
  die($db->getmessage());
   
  $sql = select * from mytable;
   
  $q= $db->query($sql);
   
  if (db::iserror($q)) {
   
  die($q->getmessage());
   
  }
   
  <tr>
   
  <td><?= $row[0] ?></td>
   
  <td><?= $row[1] ?></td>
   
  <td><?= $row[2] ?></td>
   
  </tr>
   <script runat=server>
  sub page_load(sender as object, e as
   
  eventargs)
   
  dim myconnection as new
   
  sqlconnection(server=(local)\netsdk;
   
  database=mydb;trusted_connection
   
  =yes)
   
  dim mycommand as new
   
  sqldataadapter(select * from
   
  mytable, myconnection)
   
  dim ds as new dataset()
   
  mycommand.fill(ds, mydataset)
   
  mydatagrid.datasource = mydataset
   
  mydatagrid.databind()
   
  end sub
   
  </script>
   
  <%--- 输出结果 ---%>
   
  <form runat=server>
   
  <asp:datagrid id=mydatagrid
   
  runat=server />
   
  </form>
   
   
  在 php 中,查询结果存储在一个称为 result set(结果集)的变量中,而在 ado.net 中,该变量称为 dataset 对象。结果集是返回数据的只读视图,而 .net dataset 实际上是返回数据在内存中的读写视图,这使 .net 开发人员能够轻松地处理从数据源返回的数据。
   
  输出数据时,asp.net 提供了若干方法,用于向用户或客户端显示数据。第一种方法与 php 类似,即使用 sqldatareader 对象遍历结果集以写出我们要通过查询显示的数据。更常用的方法是 asp.net 的数据绑定(php 中没有与此对应的方法)。通过该方法,开发人员可以构建用户界面并显示可在应用程序中使用和重用的控件,还可以进一步根据数据和逻辑提取显示内容。数据绑定的语法很灵活,您不仅可以绑定到数据源,还可以绑定到简单的属性、集合、表达式,甚至是方法调用返回的结果。
   
  要使用数据绑定,您需要向某个数据识别服务器控件(例如 datagrid)的 datasource 属性指定某个数据源(例如查询结果)。您还可以选择为每个列提供一些附加的格式化信息并调用 databind() 方法。服务器控件将负责完成剩余的工作。
   
  例如,在表 13 中,我们使用了数据绑定语法输出查询结果,如下所示:
   
  <%--- 在页面中加载事件---%>mydatagrid.datasource = mydatasetmydatagrid.databind()<%--- 输出结果 ---%><asp:datagrid id=mydatagrid runat=server />
  数据识别服务器控件将提供其他功能,例如支持对显示的数据进行分页或内联编辑。有关详细信息和示例,请参阅 data binding server controls。
   
  数据缓存和页面缓存
   
  对经常访问的数据进行缓存可以显著缩短站点的响应时间,因为不需要等待数据库查询便可进行页面处理。而缓存由页面请求生成的 html 可以进一步缩短响应时间,因为根本就无需处理缓存的页面。这两种环境均支持上述两种缓存策略,但与 php 相比,asp.net 提供了更多用于缓存和管理数据的方法,从而使开发人员可以针对自己应用程序的性能需要选择相应的方法和策略。
   
  页面缓存
  缓存某个页面请求的 html 输出是减少 web 应用程序的负载的一种常用方法。php 本身不支持页面缓存,但是可以通过编程的方式或下载第三方软件包来执行此操作。通常可以在服务器上通过多种方法执行页面缓存,这些方法可用于缓存编译的代码,直至将页面输出写出到一个单独的文件中(该文件将随代码的更新而更新)。
   
  在 asp.net 中,可以通过低级别的 outputcache api 或高级别的 @ outputcache 指令来执行页面缓存。启用输出缓存后,将在对页面进行第一个 get 请求时创建输出缓存条目。后续的 get 或 head 请求将由输出缓存条目支持,直到缓存的请求过期。
   
  输出缓存将检查页面的过期策略和验证策略。如果页面位于输出缓存中并标记了过期策略(指示该页面自缓存时开始 60 分钟后过期),则 60 分钟后,该页面将从输出缓存中删除。如果在过期后收到另一个请求,将执行页面代码并再次缓存该页面。这种过期策略称为绝对过期,即页面在某个时间之前有效。
   
  除了对整个页面进行输出缓存外,asp.net 还提供了一个简单方法,使您可以只缓存页面的特定部分。这种方法称为拆分缓存。您可以使用用户控件 (user control) 来指定页面区域,并使用前面介绍的 @ outputcache 指令将这些区域标记为缓存区域。该指令指定了用户控件的输出内容在服务器上缓存的时间(以秒为单位)以及影响这一时间的任何可选条件。
   
  有关 asp.net 的输出缓存的详细信息,请参阅 caching asp.net pages。

   
  数据缓存
  在 php 中,可以通过多种方法以编程方式将查询结果缓存到环境中,但 php 本身并未提供这种方法。在 php 中,可以创建数据缓存类或系统。对于少量信息,只需使用 session 变量和/或 cookie;对于大量或复杂的信息,可以创建您自己的数据缓存类。但问题是,当处理包含很多类型的复杂数据时,这种方法的效率会很低且容易出错,在一定程度上会加大编程的难度。
   
  asp.net 通过 page.cache 对象提供了一个系统范围的数据缓存方法,可用于数据集 (dataset)、数组、集合、xml 对象等。对于需要更复杂功能的应用程序,asp.net 缓存还支持三种特定类型的缓存:过期、清理以及文件和关键项相关性。
   
  过期类型的缓存使开发人员可以控制缓存项目的过期时间。可以将该时间定义为特定的时间(例如 01:00),也可以将其定义为相对于上次使用项目时的时间,例如自上次访问该项目时开始 20 分钟后过期。过期后的项目将从缓存中删除,以后再试图检索该项目时,将返回空值(除非再次将其插入到缓存中)。
  清理类型的缓存会在内存不足时尝试删除不经常使用或不重要的项目。开发人员可以控制清理的执行方式,并且可以在将项目插入到缓存中时向清理程序提供提示,以指示创建该项目的相对系统开销以及为使该项目有效而必须对其进行访问的相对频率。
  文件和关键项相关性类型的缓存将基于某个外部文件或另一个缓存项目确定该缓存项目的有效性。如果相关项发生变化,缓存项目将失效并从缓存中删除。例如,假设您有一个较大的需要定期更新并下载给员工的报告,则可以在应用程序中使用此功能。应用程序处理文件和报告中的数据,然后缓存该数据并插入对该数据的来源文件(从该文件读取数据)的相关性。当该文件更新时,数据将从缓存中删除,应用程序可以重新读取它并重新插入更新的数据副本。
  asp.net 数据缓存为编程人员提供了许多不同的方法来管理应用程序并提高应用程序的响应速度和效率。有关详细信息,请参阅 cache class 文档以了解 cache 对象。
   
  发送电子邮件
  php 和 asp.net 都为以编程方式发送电子邮件提供了内置的支持。要在此示例中使用 asp.net 发送电子邮件,您需要设置 iis smtp 服务。因为 .net 中的内置邮件对象依赖于该服务包含的对象,所以您必须安装它。尽管如此,与 php 一样,.net 也允许您使用任何 smtp 服务器或邮件服务器。表 14 对这两种环境的基本语法进行了比较。
   
  表 14:发送电子邮件
   
  php visual basic .net
  $to = test@atnoaddress.com;
  $from =
   
  me@nosuchaddress.com;
   
  $subject = hi;
   
  $message = just wanted to say
   
  hi;
   
  mail($to,$subject,$message,
   
  $from)
   dim mymail as mailmessage = new
  mailmessage()
   
  mymail.from = me@nosuchaddress.com
   
  mymail.to = test@atnoaddress.com
   
  mymail.subect = hi
   
  mymail.body = just wanted to say hi
   
  smtpmail.send(mymail)
   
   
  xml 处理和 web 服务
  在 php 中,为分析和处理 xml 所提供的内置支持功能非常薄弱。虽然开发人员可以用它来分析和处理 xml,但它不支持 dom 分析(该分析尽管比 php 的 sax 分析器速度慢,但更容易使用)。php 也不支持根据 dtd 或 xml scheme 对 xml 文档进行本地验证,它也不支持 xsl/xslt 以及市场上许多 web 应用程序常用的各种其他技术。虽然 php 可以通过很多 php 软件包完成许多与 xml 相关的任务,但 .net 和 asp.net 为处理 xml 提供了广泛的内置支持。xml 是 .net 平台的核心技术之一。有关 web 服务的详细信息,请参阅 how asp.net web services work。
   
  .net framework 为 w3c 定义的所有 xml 建议提供了广泛的支持,此外还支持 xsl/xslt、xpath、xquery 以及各种其他技术,例如用于 web 服务的 uddi、wsdl 以及 soap。
   
  虽然可以在 php 中创建 xml-rpc 类型的机制,但创建 web 服务(使开发人员能够使用常用协议和标准来交换数据和过程并将其用于查找、数据绑定和描述)。.net 为 web 服务和相关技术(如 soap、wsdl 和 uddi)提供了广泛的支持。使用 .net,开发人员还可以轻松地创建和开发 web 服务。例如,以下代码将创建一个简单的 hello world web 服务:
   
  <%@ webservice language=vb class=helloworld %>imports systemimports system.web.servicespublic class helloworld :inherits webservice <webmethod()> public function sayhelloworld() as string return(hello world) end functionend class
  利用 .net framework sdk,您可以使用命令行 web 服务描述语言工具 (wsdl.exe) 生成代理类。要为上述示例创建一个名为 helloworld.cs 的代理类,可以输入:
   
  wsdl http://somedomain.com/somefolder/helloworld.asmx?wsdl
  此类与前面创建的类非常相似。它包含一个名为 sayhelloworld 的方法,用于返回字符串。将此代理类编译到应用程序中,然后调用此代理类的方法,使该代理类通过 http 将 soap 请求打包并接收 soap 编码的响应,该响应随后被封装为字符串。
   
  对于客户端,该代码是非常简单的,如以下示例所示:
   
  dim myhelloworld as new helloworld()dim sreturn as string = myhelloworld.sayhelloworld()
  这就是创建一个简单 web 服务的全过程。有关 xml 的一般信息以及 web 服务的特定信息,请参阅 employing xml in the .net framework。
   
  小结
   
  对于简单的小型应用程序,从 php 迁移到 asp.net 通常并不复杂。对于更复杂的应用程序,由于基础体系结构的不同以及 asp.net 的 oop 模式,需要进行事先规划和精心设计,以利用 asp.net 提供的将显示与逻辑和数据明确分开的功能,以及可以节省时间的内置功能。与 php 相比,这些功能可以显著减少完成相同任务所需的代码数量。

TOP

返回顶部
AYBlue

Processed in 0.059307 second(s), 7 queries.

当前时区 GMT+8, 现在时间是 2009-1-10 11:08 京ICP备06054220号

清除 Cookies - 联系我们 - 163K.com - Archiver - WAP