首页 > 编程 > .NET > 正文

ASP.NET创建Web服务之声明

2024-07-10 12:56:03
字体:
来源:转载
供稿:网友
 声明一个xml web服务

  当你使用asp.net创建一个xml web服务时,你要把所需的@_webservice指令放到.asmx文件的最顶端。.asmx文件的存在和@_ webservice指令与所实现的xml web服务的url地址相关。接下来,你实现xml web服务类来定义xml web服务客户端可见的方法和数据类型。最后,你把你的xml web服务逻辑添加到那些方法上,以便处理xml web服务请求和返回的响应。你定义的xml web服务类可以直接被包含在.asmx文件中,也可以包含在一个单独的文件中。如果你使用一个独立的文件,它必须被编译为二进制码。你可以选择应用一个webservice属性到这个类上,来实现xml web服务。实现xml web服务的类可以继承于webservice类。

  声明一个xml web服务,这个服务的实现存在于同一个文件。

  添加一个@_webservice指令到一个.asmx文件的顶部,规定在这个实现中实现xml web服务的类和程序语言。

  class属性可以被设置为和@_webservice指令同一个汇编文件,或者是单独汇编文件中的一个类。如果这个类存在于一个独立汇编文件中,它必须放在xml web服务所在的web应用程序目录下的/bin目录中。language属性可以设置为c#、vb和js,分别表示c#、visual basic.net和jscript.net。

  下列代码示例设置@_ webservice指令的language属性为c#,class属性为mymath,保存在同一个文件中。

<%@ webservice language="c#" class="mymath" %>
using system.web.services;
public class mymath {
[ webmethod ]
public int add(int num1, int num2) {
return num1+num2;
}
}
  声明一个xml web服务,这个服务的实现存在于一个汇编文件中。

  添加一个@_webservice指令到一个.asmx文件的顶部,规定实现xml web服务的类,汇编文件中包含的实现和在这个实现中使用的程序语言。

  下面的@_webservice指令是一个.asmx文件中唯一的一行代码,指定了myname.mywebservice类存在于xml web服务的web应用程序下/bin目录中的myassembly汇编文件中。

[c#]
<%@ webservice language="c#" class="myname.mywebservice,myassembly" %>
[visual basic]
<%@ webservice language="vb" class="myname.mywebservice,myassembly" %>
  声明一个xml web服务,这个服务的实现存在于一个汇编文件中。

  添加一个@_webservice指令到一个.asmx文件的顶部,规定实现xml web服务的类,汇编文件中包含的实现和在这个实现中使用的程序语言。

  下面的@_webservice指令是一个.asmx文件中唯一的一行代码,指定了myname.mywebservice类存在于xml web服务的web应用程序下/bin目录中的myassembly汇编文件中。
  注意:如果你不在@_ webservice指令中指定一个汇编,那么asp.net在xml web服务第一次被访问的时候搜寻存放xml web服务的web应用程序的/bin目录下汇编文件的列表。所以,如果你提供汇编文件名,你将改善第一次访问时的系统性能。

  应用webservice属性

  通过应用可选的webservice属性到实现一个xml web服务的类上,你可以使用一个描述xml web服务的字符串来设置这个xml web服务的默认xml域名空间。

  强烈建议这个默认域名空间(此处为http://tempuri.org)在xml web服务公开使用前被修改。这是很重要的,因为你的xml web服务必须和其他的无意中使用默认值作为域名空间的xml web服务区分开来。

  设置成员xml web服务的xml域名空间

  应用一个webservice属性到实现xml web服务的类,设置namespace属性。

  下面的代码示例设置xml域名空间为http://www.contoso.com/。

[c#]
<%@ webservice language="c#" class="math" debug=true%>
using system.web.services;
using system;

[webservice(namespace="http://www.contoso.com/")]
public class math {
 [ webmethod ]
 public int add(int num1, int num2) {
  return num1+num2;
 }
}
[visual basic]
<%@ webservice language="vb" class="math"%>
imports system.web.services
imports system

<webservice(namespace:="http://www.contoso.com/")> _
public class math
 <webmethod()> public function add(num1 as integer, num2 as integer) as integer
 return num1 + num2
end function
end class
  从webservice类衍生

  使用asp.net创建的实现一个xml web服务的类可以选择性地衍生于webservice类来获得访问公共的asp.net对象,例如application、session、user和context的权限。application和session属性提供保存和接收web应用程序的生命周期或一个特定的会话的状态的权限。想获得关于状态的更多的信息,请看在使用asp.net创建的xml web服务中管理状态一节。user属性包含了xml web服务调用者的身份。xml web服务可以使用调用者身份来判定请求是否被授权。有关验证的更多信息,请看加强xml web服务安全一节。context属性提供了取得xml web服务客户端请求的所有特定http信息的权限。

   下面的代码示例使用context属性来获得服务器上的请求时间。

[c#]
<%@ webservice language="c#" class="util" %>
using system;
using system.web.services;

public class util: webservice {
 [ webmethod(description="returns the time as stored on the server",enablesession=false)]
 public string time()
 {
  return context.timestamp.timeofday.tostring();
 }
}
[visual basic]
<%@ webservice language="vb" class="util" %>
imports system
imports system.web.services

public class util
inherits webservice

<webmethod(description := "returns the time as stored on the server", _
enablesession := false)> _
public function time() as string
return context.timestamp.timeofday.tostring()
end function
end class
  定义xml web服务方法

  用来实现xml web服务的类的方法不能自动通过web与之通讯,但是有了使用asp.net创建的xml web服务,就能够很容易的天家这种能力。为了添加这种功能,需要应用一个webmethod属性到公共方法中。能够通过web与之通讯的xml web服务的方法被称为xml web服务方法。
xml web服务方法是xml web服务使用的消息传递基础结构的关键组成部分。说得更精确些,一个客户端和一个xml web服务使用消息,尤其是soap消息进行通讯。客户端发送一个soap请求到xml web服务中,而一个xml web服务方法返回一个soap响应。xml web服务定义了它使用操作接受的消息类型,正如web服务描述语言中定义的那样。这些操作与一个xml web服务中的每个xml web服务方法关联。 即使这些xml web服务方法中的每一个都是在asp.net使用一个类的方法定义的,但要实现通过网络传送的数据,必须把数据序列化为xml。同样地,重要的是要记得xml web服务并不能取代dcom,我们应该说xml web服务是跨越使用行业标准的平台通信的一种消息传递基础结构。

  声明一个xml web服务方法

  声明一个xml web服务,添加@_webservice指令。更多信息,请看声明一个xml web服务一节。

  添加公共方法到实现xml web服务的类中。

  应用webmethod属性到你想要映射到操作的公共方法。

  下面的代码示例有两个公共方法,其一是一个xml web服务方法。multiply方法是一个xml web服务方法,因为它有一个应用到它上的webmethod属性。

[c#]
<%@ webservice language="c#" class="util" %>
using system;
using system.web.services;
public class util: webservice
{
 public int add(int a, int b)
 {
  return a + b;
 }

 [ webmethod]
 public long multiply(int a, int b)
 {
  return a * b;
 }
}
[visual basic]
<%@ webservice language="vb" class="util" %>
imports system
imports system.web.services
public class util
inherits webservice

public function add(a as integer, b as integer) as integer
return a + b
end function

< webmethod()> _
public function multiply(a as integer, b as integer) as long
return a * b
end function
end class
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表