- 学习 Web 服务
- Web 服务 - 首页
- 什么是 Web 服务?
- 为什么使用 Web 服务?
- Web 服务 - 特性
- Web 服务 - 架构
- Web 服务 - 组件
- Web 服务 - 示例
- Web 服务 - 安全性
- Web 服务 - 标准
- Web 服务 - 总结
- Web 服务资源
- Web 服务 - 常见问题解答
- Web 服务 - 快速指南
- Web 服务 - 有用资源
Web 服务 - 示例
基于Web服务架构,我们在Web服务实现中创建了以下两个组件:
服务提供商或发布者
这是Web服务的提供者。服务提供商实现服务并使其在互联网或内网上可用。
我们将使用 .NET SDK 编写并发布一个简单的Web服务。
服务请求者或消费者
这是任何Web服务的消费者。请求者通过打开网络连接并发送XML请求来利用现有的Web服务。
我们还将编写两个Web服务请求者:一个基于Web的消费者(ASP.NET应用程序)和另一个基于Windows应用程序的消费者。
下面是我们的第一个Web服务示例,它充当服务提供商,并将两种方法(add 和 SayHello)作为Web服务公开,供应用程序使用。这是Web服务的标准模板。.NET Web服务使用.asmx扩展名。请注意,公开为Web服务的方法具有WebMethod属性。将此文件另存为FirstService.asmx,保存到IIS虚拟目录(如配置IIS中所述;例如,c:\MyWebSerces)。
FirstService.asmx <%@ WebService language = "C#" class = "FirstService" %> using System; using System.Web.Services; using System.Xml.Serialization; [WebService(Namespace = "https://127.0.0.1/MyWebServices/")] public class FirstService : WebService{ [WebMethod] public int Add(int a, int b) { return a + b; } [WebMethod] public String SayHello() { return "Hello World"; } }
要测试Web服务,必须先发布它。Web服务可以在内网或互联网上发布。我们将在此本地机器上运行的IIS上发布此Web服务。让我们从配置IIS开始。
打开开始→设置→控制面板→管理工具→Internet信息服务管理器。
展开并右键单击默认网站;选择新建→虚拟目录。虚拟目录创建向导打开。单击下一步。
将打开“虚拟目录别名”屏幕。键入虚拟目录名称。例如,MyWebServices。单击下一步。
将打开“网站内容目录”屏幕。
输入虚拟目录的目录路径名。例如,c:\MyWebServices。单击下一步。
将打开“访问权限”屏幕。根据您的需求更改设置。对于此练习,让我们保留默认设置。
单击下一步按钮。它将完成IIS配置。
单击完成以完成配置。
要测试IIS是否已正确配置,请将HTML文件(例如,x.html)复制到上面创建的虚拟目录(C:\MyWebServices)中。现在,打开Internet Explorer并键入**https://127.0.0.1/MyWebServices/x.html**。它应该打开x.html文件。
**注意** - 如果不起作用,请尝试将localhost替换为机器的IP地址。如果仍然不起作用,请检查IIS是否正在运行;您可能需要重新配置IIS和虚拟目录。
要测试此Web服务,请将FirstService.asmx复制到上面创建的IIS虚拟目录(C:\MyWebServices)中。在Internet Explorer中打开Web服务(https://127.0.0.1/MyWebServices/FirstService.asmx)。它应该打开您的Web服务页面。该页面应该包含应用程序公开为Web服务的两种方法的链接。恭喜!您已经编写了您的第一个Web服务!
测试Web服务
正如我们刚刚看到的,在.NET Framework中编写Web服务很容易。在.NET框架中编写Web服务消费者也很容易;但是,它稍微复杂一些。如前所述,我们将编写两种类型的服务消费者,一种基于Web,另一种基于Windows应用程序的消费者。让我们编写我们的第一个Web服务消费者。
基于Web的服务消费者
按照如下所示编写基于Web的消费者。将其命名为WebApp.aspx。请注意,这是一个ASP.NET应用程序。将其保存在Web服务的虚拟目录中(c:\MyWebServices\WebApp.axpx)。
此应用程序有两个文本字段,用于从用户处获取要添加的数字。它有一个按钮“执行”,单击该按钮后将获取Add和SayHello Web服务。
WebApp.aspx <%@ 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" onclick = "runSrvice_Click" runat = "server" Text = "Execute"></asp:Button> </p> </form> </body> </html>
创建消费者后,我们需要为要使用的Web服务创建一个代理。当引用已添加的Web服务时,Visual Studio .NET会自动为我们完成这项工作。以下是需要遵循的步骤:
为要使用的Web服务创建代理。使用.NET SDK提供的WSDL实用程序创建代理。此实用程序从Web服务中提取信息并创建代理。代理仅对特定Web服务有效。如果您需要使用其他Web服务,则也需要为此服务创建一个代理。当添加Web服务引用时,Visual Studio .NET会自动为您创建代理。使用.NET SDK提供的WSDL实用程序为Web服务创建代理。它将在当前目录中创建FirstSevice.cs文件。我们需要编译它以创建Web服务的FirstService.dll(代理)。
c:> WSDL https://127.0.0.1/MyWebServices/FirstService.asmx?WSDL c:> csc /t:library FirstService.cs
将编译后的代理放入Web服务的虚拟目录的bin目录中(c:\MyWebServices\bin)。Internet信息服务 (IIS) 在此目录中查找代理。
以我们已经做过的方式创建服务消费者。请注意,在消费者中实例化了Web服务代理的对象。此代理负责与服务进行交互。
在IE中键入消费者的URL以进行测试(例如,https://127.0.0.1/MyWebServices/WebApp.aspx)。
基于Windows应用程序的Web服务消费者
编写基于Windows应用程序的Web服务消费者与编写任何其他Windows应用程序相同。您只需要创建代理(我们已经完成了)并在编译应用程序时引用此代理。以下是使用Web服务的Windows应用程序。
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服务。
现在,问题出现了:您如何确定此应用程序实际上是在调用Web服务?
测试很简单。停止Web服务器,以便无法联系Web服务。现在,运行WinApp应用程序。它将引发运行时异常。现在,重新启动Web服务器。它应该可以工作。