⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 writingservices.aspx

📁 书籍教程 >> .Net教程 >> asp.net编程精彩百例
💻 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>
&lt;%@ WebService Language="C#" Class="MathService" %&gt;
</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

   &lt;WebMethod()&gt; 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>
&lt;%@ WebService Class="MyWebApplication.MyWebService" %&gt;
</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 + -