匯出 (0) 列印
全部展開

使用 SQL Reporting 進行開發 (Azure SQL Reporting)

更新日期: 2014年5月

Important重要事項

本文所提供的使用者入門資訊適用於在其應用程式中整合 所裝載之報表的應用程式開發人員,以及針對 報表伺服器開發管理工具的應用程式開發人員。

與部署至內部部署 (SSRS) 報表伺服器的報表相似之處在於,部署至 報表伺服器的報表可以顯示在使用 Visual Studio ReportViewer 控制項的 Windows Form 或 ASP.NET 應用程式中。同樣地, 會公開啟用報表伺服器之程式設計管理的 SOAP 端點。

請檢閱下列主題以了解需求、方針、相容性和不支援的功能:

回到頁首

會使用 Cookie 架構的驗證。每個 Cookie 都會在一小時後過期。報表伺服器每隔半小時就會將新的 Cookie 傳送至用戶端。當應用程式存取 報表伺服器時,用戶端程式碼必須明確儲存伺服器所傳送的新 Cookie,並且隨著後續的要求一起傳回這些 Cookie。

因為 會實作自訂驗證延伸模組以提供表單驗證介面,所以當您針對報表伺服器進行程式設計時必須納入此延伸模組。這個自訂延伸模組會以<安全性延伸模組概觀 (SQL Server 2008 R2 Reporting Services)>中所描述的方式運作。簡而言之,您必須執行下列步驟:

  1. 以表單驗證延伸模組所支援的方式提供 認證。

  2. 儲存向報表伺服器進行驗證嘗試時所傳回的驗證 Cookie。

在 中開發並且使用 資料庫的範例報表包含在 SQL Reporting 範例中。

回到頁首

ReportViewer 控制項會管理驗證 Cookie,讓您的工作更簡單。若要在 ReportViewer 控制項中顯示部署至 報表伺服器的報表,您必須提供報表伺服器 URL 和報表路徑 (就像處理任何伺服器報表一樣),然後實作 IReportServerCredentials 介面並將它用於 ServerReport.ReportServerCredentials。

下列範例示範如何實作並使用 IReportServerCredentials 來存取 報表:


/// <summary>
/// Implementation of IReportServerCredentials to supply forms credentials to SQL Reporting using GetFormsCredentials() 
/// </summary>
public class ReportServerCredentials : IReportServerCredentials
{
    public ReportServerCredentials()
    {
    }

    public WindowsIdentity ImpersonationUser
    {
        get
        {
            return null;
        }
    }

    public ICredentials NetworkCredentials
    {
        get
        {
            return null;
        }
    }

    public bool GetFormsCredentials(out Cookie authCookie, out string user, out string password, out string authority)
    {
        authCookie = null;
        user = ConfigurationManager.AppSettings["USERNAME"];
        password = ConfigurationManager.AppSettings["PASSWORD"];
        authority = ConfigurationManager.AppSettings["SERVER_NAME"];
        return true;
    }
}

然後,在 Web.config 或 App.config 檔案的 <appSettings> 區段中,指定應用程式設定。在下列範例中,考慮將 SERVER_NAME、USERNAME、PASSWORD 和 REPORT_PATH 的值取代成 報表伺服器的適當值。

<appSettings>
  <add key="SERVER_NAME" value="<INSTANCE_NAME>.report.int.mscds.com" />
  <add key="USERNAME" value="<USERNAME>"/>
  <add key="PASSWORD" value="<PASSWORD>"/>
  <add key="REPORT_PATH" value="<REPORT_PATH>"/>
</appSettings>

下列範例示範如何使用 IReportServerCredentials 來存取 報表:

public partial class Default : System.Web.UI.Page
{
    Microsoft.Reporting.WebForms.ReportViewer ReportViewer1 = new ReportViewer();
    protected void Page_Init(object sender, EventArgs e)
    {
         ReportViewer1.ServerReport.ReportServerUrl = new Uri(String.Format("https://{0}/reportserver", ConfigurationManager.AppSettings["SERVER_NAME"]));
         ReportViewer1.ServerReport.ReportPath = ConfigurationManager.AppSettings["REPORT_PATH"];
         ReportViewer1.ServerReport.ReportServerCredentials = new ReportServerCredentials();
    }
}

如需有關 IReportServerCredentials 介面的詳細資訊,請參閱 MSDN 上 ReportViewer 控制項程式設計參考中的對應 API 參考主題。若為 Windows Form 應用程式,請使用 Microsoft.Reporting.Winforms 命名空間。若為 ASP.NET 應用程式,請使用 Microsoft.Reporting.Webforms 命名空間

如需有關如何保護報表伺服器 URL、使用者名稱和密碼等敏感性資料的詳細資訊,請參閱安全性考量

回到頁首

SOAP API 提供了許多用於開發自訂報表方案的 Web 服務端點。其管理功能是透過 ReportService2005 命名空間ReportService2010 命名空間端點公開的。如需 SQL Reporting 中不支援的 SOAP API 清單,請參閱<Azure SQL Reporting 的方針和限制>。

存取 SOAP 管理端點時,您必須使用端點的 LogonUser() 方法,向端點驗證。然後,您必須儲存 HTTP 回應所傳回的驗證 Cookie,並且在每個後續的作業要求中包含此 Cookie。最簡單的方式就是建立 CookieContainer 的新執行個體,並且在呼叫 LogonUser() 之前,將它指派給 Proxy 類別的 CookieContainer 屬性。

  1. 在瀏覽器中,移至端點的路徑。例如:https://<INSTANCE_NAME>.report.int.mscds.com/ReportServer/reportservice2010.asmx

  2. 輸入您的使用者名稱和密碼,然後按一下 [登入]。WSDL 檔案就會顯示在瀏覽器中。

  3. 下載 WSDL 檔案。

  4. 開啟 Visual Studio 命令提示字元,然後執行 wsdl.exe 命令以產生 Proxy 類別。例如:wsdl /language:CS /n:"ReportServices2010" <WSDL_FILE_PATH>

  5. 在 Visual Studio 中,將產生的 .cs 檔案加入至您的專案。

  1. 下列程式碼示範如何向 ReportingServices2010 管理端點驗證並授權,然後執行 ReportingService2010.ListChildren() 作業。請注意,在 LogonUser() 方法執行之前,CookieContainer 屬性會設定為 CookieContainer 類別的新執行個體。這樣做可確保系統會儲存 LogonUser() 之 Web 回應所傳回的驗證 Cookie 並且將它用於之後的 Web 服務呼叫中。

    ReportingService2010 rs = new ReportingService2010();
    rs.Url = String.Format("https://{0}:443/ReportServer/ReportService2010.asmx", ConfigurationManager.AppSettings["SERVER_NAME"]);
    rs.CookieContainer = new CookieContainer();
    rs.LogonUser(ConfigurationManager.AppSettings["USERNAME"], ConfigurationManager.AppSettings["PASSWORD"], ConfigurationManager.AppSettings["SERVER_NAME"]);
    
    CatalogItem[] items = rs.ListChildren("/", true);
    
  2. 然後,在 Web.config 或 App.config 檔案的 <appSettings> 區段中,指定應用程式設定。在下列範例中,考慮將 SERVER_NAME、USERNAME 和 PASSWORD 的值取代成 報表伺服器的適當值。

    <appSettings>
      <add key="SERVER_NAME" value="<INSTANCE_NAME>.report.int.mscds.com" />
      <add key="USERNAME" value="<USERNAME>"/>
      <add key="PASSWORD" value="<PASSWORD>"/>
    </appSettings>
    

如需有關如何保護報表伺服器 URL、使用者名稱和密碼等敏感性資料的詳細資訊,請參閱安全性考量

回到頁首

報表伺服器 URL、使用者名稱和密碼等字串是受保護的資訊,而且必須儲存在應用程式之 Web.config 或 App.config 檔案的 <appSettings> 區段中。最佳作法是在您的組態檔中加密這項資料。下列連結是四個部分的系列文章,內容示範如何在 <connectionStrings> 區段中加密您的資料。相同的步驟也適用於 <appSettings> 區段。

回到頁首

另請參閱

顯示:
© 2014 Microsoft