65.9K
CodeProject 正在变化。 阅读更多。
Home

如何配置运行时从客户端应用程序调用 Web 服务

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.27/5 (22投票s)

2005年5月30日

4分钟阅读

viewsIcon

191631

downloadIcon

1187

一个简单易懂的项目,演示如何从客户端应用程序在运行时配置 Web 服务调用。

引言

在我的一项目中,我需要开发一个 Web 服务并将其部署给客户。在更改目标 Web 服务时我遇到了问题,因为客户可能在他们的机器上的任何位置安装它,并使用任何名称。通过这篇文章,我试图让对 Web 服务初学者(就像我一样 :-D)的人们更容易理解如何更改目标 Web 服务。

将 Web 服务添加到客户端应用程序的最简单方法之一是,通过指定 .asmx 文件的 URL 来添加对该 Web 服务的 Web 引用。这将生成所需的代理对象,而 VS.NET 会处理这一切。但是,可能会发生的情况是,在添加 Web 引用后,Web 服务被移动到了其他位置。在这种情况下,最简单的方法是重新创建代理对象。但如果您的 Web 服务客户端部署后发生了同样的事情,该怎么办?允许一个可配置的 URL 将会很方便,这样即使原始 Web 服务被移动了,您的客户端应用程序也不需要重新编译。在本文中,我们将探讨如何做到这一点。

我将在这里创建两个 Web 服务,其中一个将直接调用,另一个 Web 服务将查找 web.config 文件中的引用。

创建 Web 服务

在我们的示例中,我们将开发一个简单的 Web 服务,它只有一个方法。以下步骤将向您展示如何进行。

  • 在 VS.NET 中创建一个新的 C# Web 服务项目。
  • 打开默认的 .asmx 文件并添加以下代码
    using System;
    using System.Web.Services;
    
    namespace HWWebService
    {
      public class HWClass : System.Web.Services.WebService
      {
        [WebMethod]
        public string HelloWorld()
        {
            return "Hello Application, from Web Service";
        }    
      }
    }
  • 如上所示,这个 Web 服务类 (HWClass) 包含一个名为 HelloWorld() 的单个方法,它返回一个 string
  • 向项目中添加另一个 .asmx 文件。
  • 打开文件并按如下方式修改它
    using System;
    using System.Web.Services;
    
    namespace HWWebService
    {
      public class AnotherService : System.Web.Services.WebService
      {
        [WebMethod]public string AnotherHelloWorld()
        {
            return "Hello World, from Another Service";
        }
      }
    }
  • 这个类与前一个类似,但它的名称是 AnotherService。此外,它从 AnotherHelloWorld() 方法返回一个不同的字符串,以便您可以识别方法调用。
  • 现在我们已经准备好两个 Web 服务,编译项目。

创建 Web 服务客户端

让我们为我们的 Web 服务构建一个简单的 Web 客户端。

  • 在 VS.NET 中创建一个新的 ASP.NET Web 应用程序。
  • 该应用程序将有一个默认的 Web 窗体。在编写任何代码之前,我们需要为我们的 Web 服务添加一个 Web 引用。右键单击“引用”节点并选择“添加 Web 引用”。按照与开发普通 Web 服务时相同的步骤进行。添加 Web 引用将生成代理 Web 服务对象的代码。
  • 放置两个文本框。将它们命名为 txtReturnWStxtAnotherWS
  • 在 Web 窗体上放置两个按钮,并将它们命名为 tbnWSbtnAnotherWS。在按钮的 Click 事件中添加以下代码
    private void btnWS_Click(object sender, System.EventArgs e)
    {
      HelloWorld.HWServiceClass objProxy = new HelloWorld.HWServiceClass();
      objProxy.Url = GetHWServiceURL();
      txtReturnWS.Text = objProxy.HelloWorld();
    }
  • 上面的代码显示了您通常如何调用 Web 服务。Web 引用包含有关 Web 服务位置的信息。
  • 如果您在此客户端部署后移动 .asmx 文件,它肯定会出错。为避免这种情况,请按如下方式修改上面的代码
    private void btnAnotherWS_Click(object sender, System.EventArgs e)
    {
      AnotherWorld.AnotherService objProxy = new AnotherWorld.AnotherService();
      txtAnotherWS.Text = objProxy.AnotherHelloWorld();
    }
  • 在上面的代码中,我们已将 objProxy 类的 Url 属性显式设置为所需的 .asmx 文件。
  • 您可以将此 URL 存储在 web.config 文件的 <appSettings> 部分,并在运行时检索它。现在,即使您移动了 Web 服务,您需要做的就是更改 web.config 中的 URL。
  • 您可以通过两种方式在 web.config 文件中添加 Web 服务的 URL
    1. 直接通过将所需的标签添加到 web.config 文件,以及
    2. 通过右键单击应用程序中使用的服务,将其属性设置为动态。这将自动添加服务所需的标签,您可以将服务名称更改为“HWServiceURL”。

    以下代码展示了这一点

    private void btnWS_Click(object sender, System.EventArgs e)
    {
      localhost.HWClass objProxy=new localhost.HWClass;
      objProxy.Url=GetHWServiceURL();
      Response.Write(objProxy.HelloWorld());
    }
    public string GetHWServiceURL()
    {
      return 
        System.Configuration.ConfigurationSettings.AppSettings["HWServiceURL"];
    }
  • web.config 文件如下所示
    <appSettings>
      <add key="HWServiceURL" 
              value="https:///HWWebService/HWService.asmx" />
    </appSettings>

请注意,为了使上述代码正常工作,两个 Web 服务必须具有完全相同的 Web 方法签名。

希望对团队有所帮助!

愉快地进行 .NET 开发!

Het Waghela

Het Waghela 博客 | Het Waghela DotNet 问题链接 | Het Waghela 简历 | 更多链接

© . All rights reserved.