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