基于 web service 架构,我们创建以下两个组件作为 web service 实现的一部分:
接下来我们会使用 .NET SDK 来编写并发布一个简单的 web service。
接下来我们也将编写两个 web service 请求者:一个基于 web 的消费者(ASP.NET 应用),另一个是基于 Windows 应用的消费者。
接下来给出的是我们的第一个 web service 的例子,它将作为一个服务提供者公开两个方法( add 和 SayHello)来作为将被应用所使用的 web service。这是 web service 的一个标准模板。.NET web service 使用的是 .asmx 扩展名。注意一个方法要公开为一个 web service 的话要具备 WebMethod 属性。将本文件在 IIS 虚拟目录中保存为 FirstService.asmx。
FirstService.asmx
要测试一个 web service,首先得先进行发布。一个 web service 既可以发布在内部网也可以发布在互联网。我们将会把这个 web service 发布在一台内网机器上运行的 IIS 上。我们先从配置 IIS 开始。
注意:如果没有打开 x.html,试着将 localhost 替换为你机器的 IP 地址。如果仍然不行,检查 IIS 是否在运行;或者重新配置 IIS 以及虚拟目录。
然后验证 web service,将 FirstService.asmx 复制到上面创建的 IIS 虚拟目录中( C:\MyWebServices)。在 IE 中打开 web service( http://localhost/MyWebServices/FirstService.asmx)。能够打开你的 web service 页面就是正常。该页面应该能够链接到你公开为 web service 的两个方法。恭喜!你已经写好了你的第一个 web service!
该应用有两个用于获取用户添加的输入框。它有一个 Execute 按钮,当被点击的时候将得到 Add 和 SayHello 两个 web service。
WebApp.axpx
消费者创建好以后,还需要为要被消费的 web service 创建一个代理。在引用一个已添加的 web service 以后这个工作会由 Visual Studio .NET 自动完成。下面是接下来的步骤:
WinApp.cs
使用命令 c:\>csc /r:FirstService.dll WinApp.cs 将其编译, WinApp.exe 将被创建,执行它来测试该应用和 web service。
现在,问题出现了:你怎么能确保该应用程序实际上是调用 web service?
验证其实很简单。关掉你的 web 服务器,这样 web service 就无法连接了。然后,执行 WinApp 应用。它将抛一个运行时异常。现在,再启动 web 服务器, WinApp 应用就能正常工作啦。
原文链接: http://www.tutorialspoint.com/webservices/web_services_examples.htm
服务提供者或者发布者
它是 web service 的提供者。服务提供者实现了 web service 并使得它可以通过互联网或者内部网进行访问。接下来我们会使用 .NET SDK 来编写并发布一个简单的 web service。
服务请求者或者消费者
它是 web service 的消费者。请求者通过打开一个网络连接并发送一个 XML 请求来利用一个现成的 web service。接下来我们也将编写两个 web service 请求者:一个基于 web 的消费者(ASP.NET 应用),另一个是基于 Windows 应用的消费者。
接下来给出的是我们的第一个 web service 的例子,它将作为一个服务提供者公开两个方法( add 和 SayHello)来作为将被应用所使用的 web service。这是 web service 的一个标准模板。.NET web service 使用的是 .asmx 扩展名。注意一个方法要公开为一个 web service 的话要具备 WebMethod 属性。将本文件在 IIS 虚拟目录中保存为 FirstService.asmx。
FirstService.asmx
<%@ WebService language = "C" class = "FirstService" %>
using System;
using System.Web.Services;
using System.Xml.Serialization;
[WebService(Namespace="http://localhost/MyWebServices/")]
public class FirstService : WebService
{
[WebMethod]
public int Add(int a, int b)
{
return a + b;
}
[WebMethod]
public String SayHello()
{
return "Hello World";
}
}
要测试一个 web service,首先得先进行发布。一个 web service 既可以发布在内部网也可以发布在互联网。我们将会把这个 web service 发布在一台内网机器上运行的 IIS 上。我们先从配置 IIS 开始。
- 打开 → 设置 → 控制面板 → 管理工具 → 因特网服务管理器
- 展开并右击默认的 web 站点;选择 新建 → 虚拟目录。虚拟目录创建向导将被打开。点击下一步。
- "虚拟目录别名"屏幕将被打开。输入虚拟目录名。比如,MyWebServices,点击下一步。
- "网站内容目录" 屏幕将被打开。
- 输入虚拟目录的目录路径名。比如,c:\MyWebServices,点击下一步。
- "访问权限" 屏幕将被打开。根据你的需求对设置进行更改。本示例中我们保持默认设置。
- 点击下一步按钮。它将完成 IIS 配置。
- 点击完成来结束配置。
注意:如果没有打开 x.html,试着将 localhost 替换为你机器的 IP 地址。如果仍然不行,检查 IIS 是否在运行;或者重新配置 IIS 以及虚拟目录。
然后验证 web service,将 FirstService.asmx 复制到上面创建的 IIS 虚拟目录中( C:\MyWebServices)。在 IE 中打开 web service( http://localhost/MyWebServices/FirstService.asmx)。能够打开你的 web service 页面就是正常。该页面应该能够链接到你公开为 web service 的两个方法。恭喜!你已经写好了你的第一个 web service!
测试 web service
如刚才所见,在 .NET 框架下编写 web service 还是很简单的。在 .NET 框架下编写 web service 消费者也很简单。如上所述,我们将编写两种类型的服务消费者,一个基于 web 的而另一个基于 Windows 应用。现在我们来写我们的第一个 web service 消费者。基于 web 的服务消费者
如下写一个基于 web 的消费者。将其命名为 WebApp.aspx。注意它是一个 ASP.NET 应用。将它保存着 web service 测虚拟目录( c:\MyWebServices\WebApp.axpx)。该应用有两个用于获取用户添加的输入框。它有一个 Execute 按钮,当被点击的时候将得到 Add 和 SayHello 两个 web service。
WebApp.axpx
<%@ Page Language="C#" %>
<script runat="server">
void runSrvice_Click(Object sender, EventArgs e){
FirstService mySvc = new FirstService();
Label1.Text = mySvc.SayHello();
Label2.Text = mySvc.Add(Int32.Parse(txtNum1.Text), Int32.Parse(txtNum2.Text)).ToString();
}
</script>
<html>
<head> </head>
<body>
<form runat="server">
<p>
<em>First Number to Add </em>:
<asp:TextBox id="txtNum1" runat="server" Width="43px">4< /asp:TextBox>
</p>
<p>
<em>Second Number To Add </em>:
<asp:TextBox id="txtNum2" runat="server" Width="44px">5</asp:TextBox>
</p>
<p>
<strong><u>Web Service Result -</u></strong>
</p>
<p>
<em>Hello world Service</em> :
<asp:Label id="Label1" runat="server" Font-Underline="True">Label< /asp:Label>
</p>
<p>
<em>Add Service</em> :
& <asp:Label id="Label2" runat="server" Font-Underline="True">Label</asp:Label>
</p>
<p align="left">
<asp:Button id="runSrvice" οnclick="runSrvice_Click" runat="server" Text="Execute"></asp:Button>
</p>
</form>
</body>
</html>
消费者创建好以后,还需要为要被消费的 web service 创建一个代理。在引用一个已添加的 web service 以后这个工作会由 Visual Studio .NET 自动完成。下面是接下来的步骤:
- 为要被消费的 web service 创建一个代理。使用 NET SDK 提供的 WSDL 工具来创建代理。这个工具从 web service 中抽取信息并创建一个代理。该代理只对该特定 web service 有效。如果你需要消费其他 web service,那么你需要为其他 web service 也创建一个代理。在 web service 引用添加的时候,Visual Studio .NET 就自动为你创建了一个代理。使用 .NET SDK 提供的 WSDL 工具来为 web service 创建代理。它将在当前目录创建 FirstSevice.cs 文件。我们需要对其进行编译来为 web service 创建 FirstService.dll(代理)。相关命令:c:> WSDL http://localhost/MyWebServices/FirstService.asmx?WSDL;c:> csc /t:library FirstService.cs。
- 将编译好的代理放到 web service 的虚拟目录下的 bin 目录中(c:\MyWebServices\bin)。因特网信息服务 IIS 寻找这个目录中的代理。
- 同样创建服务消费者。注意一个 web service 代理对象将在消费者中进行实例化。这个代理负责与服务进行交互。
- 在 IE 中输入消费者 URL 来测试一下(例如,http://localhost/MyWebServices/WebApp.aspx)。
基于 Windows 应用的 web service 消费者
写一个基于 Windows 应用的 web service 消费者跟写其他任何 Windows 应用是一样的。你需要做的仅仅是创建代理(我们上边介绍的)并在编译应用的时候引用这个代理。下面是我们使用 web service 的 Windows 应用。这个应用创建了一个 web service 对象(当然,只是代理而已)并调用了它的 SayHello 和 Add 方法。WinApp.cs
using System;
using System.IO;
namespace SvcConsumer {
class SvcEater {
public static void Main(String[] args) {
FirstService mySvc = new FirstService();
Console.WriteLine("Calling Hello World Service: " + mySvc.SayHello());
Console.WriteLine("Calling Add(2, 3) Service: " + mySvc.Add(2, 3).ToString());
}
}
}
使用命令 c:\>csc /r:FirstService.dll WinApp.cs 将其编译, WinApp.exe 将被创建,执行它来测试该应用和 web service。
现在,问题出现了:你怎么能确保该应用程序实际上是调用 web service?
验证其实很简单。关掉你的 web 服务器,这样 web service 就无法连接了。然后,执行 WinApp 应用。它将抛一个运行时异常。现在,再启动 web 服务器, WinApp 应用就能正常工作啦。
原文链接: http://www.tutorialspoint.com/webservices/web_services_examples.htm