第 3 课:访问 Web 服务

将报表服务器 Web 服务的引用添加到项目中后,下一步是创建 Web 服务代理类的实例。然后,您可以通过调用代理类中的方法来访问 Web 服务的方法。当应用程序调用这些方法时,Visual Studio 生成的代理类代码将处理应用程序与 Web 服务之间的通信。

首先,您将创建一个 Web 服务代理类的实例 ReportingService2005。接着,您将使用代理类调用 Web 服务的 GetProperties 方法。您将使用该调用来检索一个示例报表 Company Sales 的名称和说明。

注意注意

访问在具有高级服务的 SQL Server Express 上运行的 Web 服务时,必须将“$SQLExpress”追加到“ReportServer”路径。例如:

http://<Server Name>/reportserver$sqlexpress/reportservice2005.asmx"

访问 Web 服务

  1. 首先,您必须将命名空间添加到 Program.cs 文件(在 Visual Basic 中为 Module1.vb),采用的方法是向代码文件中添加 using(在 Visual Basic 中为 Import)指令。如果您使用该指令,则不必完全限定命名空间中的类型。

  2. 为此,请在代码文件的开头添加以下代码:

    Imports System
    Imports GetPropertiesSample.ReportService2005
    
    using System;
    using GetPropertiesSample.ReportService2005;
    
  3. 在代码文件中输入了命名空间指令后,请使用控制台应用程序的 Main 方法输入以下代码。请确保在设置 Web 服务实例的 Url 属性时更改服务器的名称:

    Sub Main()
       Dim rs As New ReportingService2005
       rs.Credentials = System.Net.CredentialCache.DefaultCredentials
       rs.Url = "http://<Server Name>/reportserver/reportservice2005.asmx"
    
       Dim name As New [Property]
       name.Name = "Name"
    
       Dim description As New [Property]
       description.Name = "Description"
    
       Dim properties(1) As [Property]
       properties(0) = name
       properties(1) = description
    
       Try
          Dim returnProperties As [Property]() = rs.GetProperties( _
             "/AdventureWorks Sample Reports/Company Sales", properties)
    
          Dim p As [Property]
          For Each p In returnProperties
              Console.WriteLine((p.Name + ": " + p.Value))
          Next p
    
       Catch e As Exception
          Console.WriteLine(e.Message)
       End Try
    End Sub
    
    static void Main(string[] args)
    {
       ReportingService2005 rs = new ReportingService2005();
       rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
       rs.Url = "http://<Server Name>/reportserver/reportservice2005.asmx";
    
       Property name = new Property();
       name.Name = "Name";
    
       Property description = new Property();
       description.Name = "Description";
    
       Property[] properties = new Property[2];
       properties[0] = name;
       properties[1] = description;
    
       try
       {
          Property[] returnProperties = rs.GetProperties(
          "/AdventureWorks Sample Reports/Company Sales",properties);
    
          foreach (Property p in returnProperties)
          {
             Console.WriteLine(p.Name + ": " + p.Value);
          }
       }
    
       catch (Exception e)
       {
          Console.WriteLine(e.Message);
       }
    }
    
  4. 保存解决方案。

演练示例代码使用 Web 服务的 GetProperties 方法来检索示例报表 Company Sales 的属性。GetProperties 方法采用两个参数:一个是要检索其属性信息的报表的名称,一个是 Property[] 对象数组,它包含要检索其值的属性的名称。该方法还返回一个 Property[] 对象的数组,其中包含在属性参数中指定的属性名称和属性值。

注意注意

如果您为属性参数提供空 Property[] 数组,则将返回所有可用属性。

在前面的示例中,代码使用 GetProperties 方法返回示例报表 Company Sales 的名称和说明。然后,代码使用 foreach 循环将属性和值写入控制台。

有关创建和使用报表服务器 Web 服务的代理类的详细信息,请参阅创建 Web 服务代理