【问题标题】:Testing a Web Service测试 Web 服务
【发布时间】:2011-01-28 15:24:47
【问题描述】:

我有一个 C# 中的 Web 服务应用程序。当我在 Visual Studio 中运行 Debug 时,它会在 http://localhost:###### 启动服务并显示 Default.htm 页面,其中包含用于测试可以对 Web 服务进行的不同调用的链接。

有没有办法调用这个本地运行的版本来从另一台计算机测试它?我尝试调用测试页面上的链接,但将 localhost 替换为运行它的机器的 IP 地址,但它说它无法连接到服务器。

【问题讨论】:

  • Web 服务通常没有 default.htm,而是一个 .asmx 页面。你能澄清一下吗?

标签: c# web-services visual-studio-2010


【解决方案1】:

嵌入式 Visual Studio Web 服务器 (Cassini) 只能从本地计算机访问。如果您想从另一台计算机使用 Web 服务,您需要将该服务部署到 IIS,然后您可以通过 http://xxx.xxx.xxx.xxx/MyWebService/MyWebService.asmx 访问它(将 xxx 替换为您的 IP 地址,将 MyWebService 替换为适当的 IIS网站路径)。

然后要创建一个测试应用程序,您可以创建一个 ASP.NET 网站或 WinForms/Console 应用程序并在 Visual Studio 中导入一个 Web 服务引用。这将自动为您构建代理类并使调用服务变得非常容易。

【讨论】:

  • 这是通过 Project -> 在 Visual Studio 中构建部署包完成的吗?我之前没有真正使用过 IIS,所以我一直在尝试在网上找到一些好的指南。
  • 如果您还没有安装 IIS:learn.iis.net/page.aspx/28/… 接下来,您可以转到 Build -> Publish 并选择 File System 作为位置,然后单击“...”浏览到你想把它放在哪里。选择本地 IIS 并创建一个新的 Web 应用程序(执行此操作的按钮位于该窗口的左上角)。将其设置为您的目标并发布。
【解决方案2】:

只需将您的服务包装在控制台应用程序中,以便可以访问它。

  1. 在您的解决方案中创建一个新的控制台应用程序项目,将其命名为有意义的名称(如果您的服务命名为 MyService 可能是 MysServiceConsoleHost 或一些传真)。
  2. 在此项目中包含对服务项目的引用。
  3. 在您的新项目 (program.cs) 中有如下内容:

using System;
using System.ServiceModel;

class Program
{
  static String TITLE_TEXT = "MyService -- Console Host ({0})" + (System.Diagnostics.Debugger.IsAttached?" [DEBUG]":"");
  static void Main(string[] args)
  {
    Console.Title = String.Format(TITLE_TEXT, "Not Running");
    try
    {
      ServiceHost host = new ServiceHost(typeof(MyService));

      Console.Title = String.Format(TITLE_TEXT, "Starting");
      host.open();

      Console.Title = String.Format(TITLE_TEXT, "Running");
      Console.WriteLine("Service is started, press any key to exit.");
      Console.ReadKey();

      Console.Title = String.Format(TITLE_TEXT, "Closing");
      host.close();
      host = null;
      Console.Title = String.Format(TITLE_TEXT, "Closed");
    }
    catch (Exception ex)
    {
      Console.Title = String.Format(TITLE_TEXT, "Exception");
      Console.WriteLine("An error occured while running the host:");
      Console.WriteLine(ex.Message);
      Console.WriteLine();
      Console.WriteLine(ex.StackTrace);
      Console.ReadLine();
    }
  }
}

根据需要替换MyService 的实例,然后运行它。确保您有一个 .config 文件,该文件指定服务的端点、要运行的端口等。然后任何人都可以访问您的服务,如有必要,您可以在实时调用期间通过服务进行调试。

【讨论】:

  • 因为这是一个需要测试的网络服务,我想你会使用 http 来访问它。
  • @Andy:不确定你的意思。这与 IIS 所做的完全相同,同时为您提供在调用代码时单步执行代码的便利(通过直接访问、测试应用程序、实时连接等)
【解决方案3】:

一个非常简单的解决方案是使用 localtunnel:

http://progrium.com/localtunnel/

它将设置一个代理,该代理将指向您的本地计算机,并且可以在您的计算机之外访问。

【讨论】:

    【解决方案4】:

    如果您使用 Visual Studio 的内置 Web 服务器 (Cassini),则只能在本地调用。如果您想远程连接,您必须安装 IIS 并配置您的项目以使用它。

    【讨论】:

      【解决方案5】:

      是和不是。如果您使用的是内置的 ASP.NET 开发服务器(很可能,因为您有 :####),我不相信可以与外部联系。

      但是,您可以“部署”到本地 IIS 实例,然后可以从其他计算机上对其进行攻击。 Web Service Studio 是一个很好的 Web 服务测试工具。还有一些非常好的开源工具。我自己也喜欢 SoapUI。

      【讨论】:

        【解决方案6】:

        我可以在 localhost 上测试 web 服务。我有一个 Windows CE 摩托罗拉终端,连接到我的电脑。我的电脑上有VS2008。 我的计算机地址是 xxx.xxx.x.xxx,网络服务器是 localhost:62209,所以在终端我使用网络服务地址:http://xxx.xxx.x.xxx/62209/MyWebservice.asmx,它可以工作。 也许是因为终端直接连接到运行网络服务器的计算机? 无论如何,它有效。

        【讨论】:

          猜你喜欢
          • 2013-02-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-03
          • 2023-03-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多