基于Web服务架构,我们创建以下两个组件作为Web服务实现的一部分:
这是Web服务的提供者。服务提供商实现该服务并使其在Internet或Intranet上可用。
我们将使用.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="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服务,它必须被发布。Web服务可以在Intranet或Internet上发布。我们将在本地机器上运行的IIS上发布此Web服务。让我们从配置IIS开始吧。
打开开始→设置→控制面板→管理工具→Internet服务管理器。
展开并右键单击默认网站; 选择新建→虚拟目录。虚拟目录创建向导将打开。点击下一步。
“虚拟目录别名”屏幕打开。键入虚拟目录名称。例如MyWebServices。并单击下一步。
“网站内容目录”屏幕打开。
输入虚拟目录的目录路径名。例如,c: MyWebServices单击“下一步”。
“访问权限”屏幕打开。根据您的要求更改设置。让我们保留此练习的默认设置。
单击下一步按钮。它完成IIS配置。
单击完成以完成配置。
要测试IIS是否已正确配置,请在上面创建的虚拟目录(C: MyWebServices)中复制HTML文件(例如x.html)。现在,打开Internet Explorer并键入http://localhost/MyWebServices/x.html。它应该打开x.html文件。
注意:如果不起作用,请尝试用本机的IP地址替换本地主机。如果仍然不起作用,请检查IIS是否正在运行; 您可能需要重新配置IIS和虚拟目录。
要测试此Web服务,请在上面创建的IIS虚拟目录(C: MyWebServices)中复制FirstService.asmx。在Internet Explorer中打开Web服务(http://localhost/MyWebServices/FirstService.asmx)。它应该打开您的Web服务页面。该页面应具有链接到我们的应用程序作为Web服务公开的两种方法。恭喜!你已经写了你的第一个网络服务!
正如我们刚才看到的那样,在.NET Framework中编写Web服务很容易。在.NET框架中编写Web服务使用者也很容易; 然而,它有一点更多的参与。如前所述,我们将编写两种类型的服务消费者,一种基于Web和另一种基于Windows应用程序的消费者。让我们写第一个Web服务消费者。
编写一个基于网络的消费者,如下所示。称它为WebApp.aspx。请注意,它是一个ASP.NET应用程序。将其保存在Web服务的虚拟目录(c: MyWebServices WebApp.aspx)中。
此应用程序有两个文本字段用于从用户获取要添加的数字。它有一个按钮,执行,当点击获取添加和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 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
编写基于Windows应用程序的Web服务使用者与编写任何其他Windows应用程序相同。您只需要创建代理(我们已经完成),并在编译应用程序时引用此代理。以下是使用Web服务的Windows应用程序。此应用程序创建一个Web服务对象(当然是代理),并调用SayHello,并在其上添加方法。
WinApp.csusing 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服务器。应该工作