📄 writingservices.aspx
字号:
<%@ Register TagPrefix="Acme" Namespace="Acme" Assembly="QSTools" %>
<%@ Register TagPrefix="Acme" TagName="SourceRef" Src="/quickstart/aspplus/util/SrcRef.ascx"%>
<!-- #include virtual="/quickstart/aspplus/include/header.inc" -->
<h4>编写简单的 Web 服务</h4>
可以使用任何文本编辑器在几分钟内编写出一个简单的 XML Web 服务。您在本节中创建的服务 MathService 公开将两个数相加、相减、相除和相乘的方法。在页面的顶部,下面的指令除了指定 XML Web 服务的语言(此例中为 C#)外,还将文件标识为该服务。
<div class="code"><pre>
<%@ WebService Language="C#" Class="MathService" %>
</pre></div>
<p>
在此同一文件中,定义一个封装服务功能的类。该类应当是公共的,并且可以随意地从 <b>WebService</b> 基类继承。将从该服务公开的每种方法的前面都由 <b>[WebMethod]</b> 属性标记。没有该属性,方法将不从服务公开。这在隐藏由公共 <b>Web 服务</b>方法调用的实现详细信息,或在 <b>WebService</b> 类还用于本地应用程序的情况中(本地应用程序可以使用任何公共类,但只有 <b>WebMethod</b> 类可以作为 XML Web 服务被远程访问)有时很有用。
<p>
<p><Acme:TabControl runat="server">
<Tab Name="C#">
using System;
using System.Web.Services;
public class MathService : WebService {
[WebMethod] public int Add(int a, int b) {
return a + b;
}
}
</Tab>
<Tab Name="VB">
Imports System
Imports System.Web.Services
Public Class MathService : Inherits WebService
<WebMethod()> Public Function Add(a As Integer, b As Integer) As Integer
Return(a + b)
End Function
End Class
</Tab>
<Tab Name="JScript">
import System;
import System.Web.Services;
public class MathService extends WebService {
WebMethodAttribute public function Add(a:int, b:int) : int {
return a + b;
}
}
</Tab>
</Acme:TabControl><p>
<p>
XML Web 服务文件以 .asmx 文件扩展名保存。与 .aspx 文件一样,这些文件也在服务请求发出(后面的请求由缓存的预编译 type 对象服务)时由 ASP.NET 运行库自动编译。对于 MathService 的情况,已在 .asmx 文件本身中定义了 <b>WebService</b> 类。注意,如果浏览器请求 .asmx 文件,ASP.NET 运行库将返回描述 Web 服务的 XML Web 服务帮助页。
<p>
<table>
<tr>
<td>
<Acme:LangSwitch runat="server">
<CsTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/services/MathService/CS/MathService.asmx"
ViewSource="/quickstart/aspplus/samples/services/MathService/MathService.src"
Icon="/quickstart/aspplus/images/mathservice_asmx.gif"
Caption="C# MathService.asmx"
runat="server" />
</CsTemplate>
<VbTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/services/MathService/VB/MathService.asmx"
ViewSource="/quickstart/aspplus/samples/services/MathService/MathService.src"
Icon="/quickstart/aspplus/images/mathservice_asmx.gif"
Caption="VB MathService.asmx"
runat="server" />
</VbTemplate>
<JsTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/services/MathService/JS/MathService.asmx"
ViewSource="/quickstart/aspplus/samples/services/MathService/MathService.src"
Icon="/quickstart/aspplus/images/mathservice_asmx.gif"
Caption="JScript MathService.asmx"
runat="server" />
</JsTemplate>
</Acme:LangSwitch>
</td>
<td>
<Acme:LangSwitch runat="server">
<CsTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/services/MathService/CS/MathService.asmx?WSDL"
Icon="/quickstart/aspplus/images/service_sdl.gif"
Caption="C# MathService.asmx?wsdl"
runat="server" />
</CsTemplate>
<VbTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/services/MathService/VB/MathService.asmx?WSDL"
Icon="/quickstart/aspplus/images/service_sdl.gif"
Caption="VB MathService.asmx?wsdl"
runat="server" />
</VbTemplate>
<JsTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/services/MathService/JS/MathService.asmx?WSDL"
Icon="/quickstart/aspplus/images/service_sdl.gif"
Caption="JScript MathService.asmx?wsdl"
runat="server" />
</JsTemplate>
</Acme:LangSwitch>
</td>
</tr>
</table>
<h5>预编译的 XML Web 服务</h5>
如果有一个要公开为 XML Web 服务的预编译类(并且该类公开用 <b>[WebMethod]</b> 属性标记的方法),则仅用如下命令行即可创建 .asmx 文件。
<div class="code"><pre>
<%@ WebService Class="MyWebApplication.MyWebService" %>
</pre></div>
<p>
<code>MyWebApplication.MyWebService</code> 定义 <b>WebService</b> 类,并且包含在 ASP.NET 应用程序的 \bin 子目录中。
<p>
<h5>从客户端应用程序使用 XML Web 服务</h5>
若要使用该服务,需要使用 SDK 中包含的 Web 服务描述语言命令行工具 (WSDL.exe) 创建与 .asmx 文件中定义的类相似的代理类。(它将仅包含 <b>WebMethod</b> 方法。)然后使用包含的此代理类编译代码。
<p>
WSDL.exe 接受各种命令行选项,但若要创建代理,则只需一个选项:WSDL 的 URI。在此示例中,传递几个指定此代理的首选语言、命名空间和输出位置的额外选项。还对以前保存的 WSDL 文件进行编译,而不是编译服务本身的 URI:
<div class="code"><pre>
wsdl.exe /l:CS /n:MathService /out:MathService.cs MathService.wsdl
</pre></div>
<p>
一旦代理类存在,即可创建基于它的对象。用该对象进行的每个方法调用然后发送到 XML Web 服务的 URI(通常以 SOAP 请求的形式)。
<p>
<Acme:LangSwitch runat="server">
<CsTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/services/MathService/CS/MathServiceClient.aspx"
ViewSource="/quickstart/aspplus/samples/services/MathService/MathServiceClient.src"
Icon="/quickstart/aspplus/images/mathservice_client.gif"
Caption="C# MathServiceClient.aspx"
runat="server" />
</CsTemplate>
<VbTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/services/MathService/VB/MathServiceClient.aspx"
ViewSource="/quickstart/aspplus/samples/services/MathService/MathServiceClient.src"
Icon="/quickstart/aspplus/images/mathservice_client.gif"
Caption="VB MathServiceClient.aspx"
runat="server" />
</VbTemplate>
<JsTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/services/MathService/JS/MathServiceClient.aspx"
ViewSource="/quickstart/aspplus/samples/services/MathService/MathServiceClient.src"
Icon="/quickstart/aspplus/images/mathservice_client.gif"
Caption="JScript MathServiceClient.aspx"
runat="server" />
</JsTemplate>
</Acme:LangSwitch>
<!-- #include virtual="/quickstart/aspplus/include/footer.inc" -->
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -