WebServices - 示例

  • 简述

    基于 WebServices 架构,我们创建以下两个组件作为 WebServices 实现的一部分 -
  • 服务提供者或发布者

    这是网络服务的提供者。服务提供商实施服务并使其在 Internet 或 Intranet 上可用。
    我们将使用 .NET SDK 编写和发布一个简单的 WebServices 。
  • 服务请求者或消费者

    这是 WebServices 的任何消费者。请求者通过打开网络连接并发送 XML 请求来利用现有的 WebServices 。
    我们还将编写两个 WebServices 请求程序:一个基于 Web 的使用者(ASP.NET 应用程序)和另一个基于 Windows 应用程序的使用者。
    下面给出了我们的第一个 WebServices 示例,它作为服务提供者工作,并公开了两个方法(add 和 SayHello)作为应用程序使用的 WebServices 。这是 WebServices 的标准模板。.NET WebServices 使用 .asmx 扩​​展名。请注意,作为 WebServices 公开的方法具有 WebMethod 属性。将此文件另存为 IIS 虚拟目录中的 FirstService.asmx(如配置 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";
       }
    }
    
    要测试 WebServices ,必须发布它。可以在 Intranet 或 Internet 上发布 WebServices 。我们将在本地计算机上运行的 IIS 上发布此 WebServices 。让我们从配置 IIS 开始。
    • 打开开始 → 设置 → 控制面板 → 管理工具 → Internet 服务管理器。
    • 展开并右键单击默认网站;选择新建 &#rarr; 虚拟目录。虚拟目录创建向导打开。点击下一步。
    • “虚拟目录 Mooas”屏幕打开。键入虚拟目录名称。例如,MyWebServices 。点击下一步。
    • “网站内容目录”屏幕打开。
    • 输入虚拟目录的目录路径名。例如,c:\MyWebServices。点击下一步。
    • “访问权限”屏幕打开。根据您的要求更改设置。让我们保留本练习的默认设置。
    • 单击下一步按钮。它完成了 IIS 配置。
    • 单击完成以完成配置。
    要测试 IIS 是否已正确配置,请在上面创建的虚拟目录 (C:\MyWebServices) 中复制一个 HTML 文件(例如 x.html)。现在,打开 Internet Explorer 并输入http://localhost/MyWebServices/x.html。它应该打开 x.html 文件。
    注意- 如果它不起作用,请尝试将 localhost 替换为您机器的 IP 地址。如果还是不行,检查IIS是否在运行;您可能需要重新配置 IIS 和虚拟目录。
    要测试此 WebServices ,请将 FirstService.asmx 复制到上面创建的 IIS 虚拟目录 (C:\MyWebServices) 中。在 Internet Explorer (http://localhost/MyWebServices/FirstService.asmx) 中打开 WebServices 。它应该会打开您的 WebServices 页面。该页面应该包含指向我们的应用程序公开为 WebServices 的两个方法的链接。恭喜!您已经编写了您的第一个 WebServices !
  • 测试 WebServices

    正如我们刚刚看到的,在 .NET Framework 中编写 WebServices 很容易。在 .NET 框架中编写 WebServices 消费者也很容易;但是,它涉及更多。如前所述,我们将编写两种类型的服务消费者,一种是基于 Web 的消费者,另一种是基于 Windows 应用程序的消费者。让我们编写我们的第一个 WebServices 使用者。

    基于网络的服务消费者

    编写一个基于 Web 的消费者,如下所示。称它为 WebApp.aspx。请注意,它是一个 ASP.NET 应用程序。将其保存在 WebServices 的虚拟目录中 (c:\MyWebServices\WebApp.axpx)。
    此应用程序有两个文本字段,用于从用户那里获取要添加的数字。它有一个按钮,Execute,当单击该按钮时,将获取 Add 和 SayHello WebServices 。
    
    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>
    
    创建消费者后,我们需要为要消费的 WebServices 创建一个代理。在引用已添加的 WebServices 时,这项工作由 Visual Studio .NET 自动为我们完成。以下是要遵循的步骤 -
    • 为要使用的 WebServices 创建一个代理。代理是使用 .NET SDK 提供的 WSDL 实用程序创建的。此实用程序从 WebServices 中提取信息并创建代理。代理仅对特定的 WebServices 有效。如果您需要使用其他 WebServices ,您还需要为此服务创建代理。添加 WebServices 引用时,Visual Studio .NET 会自动为您创建一个代理。使用 .NET SDK 提供的 WSDL 实用程序为 WebServices 创建代理。它将在当前目录中创建 FirstService.cs 文件。我们需要编译它来为 WebServices 创建 FirstService.dll(代理)。
    
    c:> WSDL http://localhost/MyWebServices/FirstService.asmx?WSDL
    c:> csc /t:library FirstService.cs
    
    • 将编译好的代理放到Web Service虚拟目录的bin目录下(c:\MyWebServices\bin)。Internet 信息服务 (IIS) 在此目录中查找代理。
    • 以我们已经做过的相同方式创建服务使用者。请注意,WebServices 代理的对象是在消费者中实例化的。该代理负责与服务交互。
    • 在 IE 中键入使用者的 URL 以对其进行测试(例如,http://localhost/MyWebServices/WebApp.aspx)。

    基于 Windows 应用程序的 WebServices 使用者

    编写基于 Windows 应用程序的 WebServices 使用者与编写任何其他 Windows 应用程序相同。您只需要创建代理(我们已经完成)并在编译应用程序时引用此代理。以下是我们使用 WebServices 的 Windows 应用程序。此应用程序创建一个 WebServices 对象(当然是代理)并在其上调用 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。运行它来测试应用程序和 WebServices 。
    现在,问题出现了:您如何确定该应用程序实际上正在调用 WebServices ?
    测试很简单。停止您的 WebServices 器,以便无法联系 WebServices 。现在,运行 WinApp 应用程序。它将触发运行时异常。现在,再次启动 WebServices 器。它应该工作。