在 Web 應用程式中使用 SOAP API
您可以透過 Reporting Services SOAP API 存取報表伺服器的完整功能。因為它是一種 Web 服務,所以可以輕易地存取 SOAP API,以提供企業報表功能給自訂商務應用程式。您可以從 Web 應用程式存取報表伺服器 Web 服務,這與從 Microsoft Windows 應用程式存取 SOAP API 非常類似。使用 Microsoft.NET Framework,您就可以產生公開報表伺服器 Web 服務的屬性與方法之 Proxy 類別,而且可讓您使用熟悉的基礎結構與工具,建立以 Reporting Services 技術為基礎的商務應用程式。
Reporting Services 報表管理功能可以從 Web 應用程式存取,就和從 Windows 應用程式存取一樣簡單。從 Web 應用程式,您可以從報表伺服器資料庫新增和移除項目、設定項目安全性、修改報表伺服器資料庫項目、管理排程和傳遞等等。
啟用模擬
設定 Web 應用程式的第一個步驟是從 Web 服務用戶端啟用模擬。透過模擬,ASP.NET 應用程式可以使用它們正在操作的用戶端識別來執行。ASP.NET 依賴 Microsoft Internet Information Services (IIS) 驗證使用者並將已驗證的 Token 傳遞給 ASP.NET 應用程式,或者如果無法驗證使用者,請傳遞未驗證的 Token。不論是哪一種情況,若有啟用模擬,ASP.NET 應用程式不論收到哪一個 Token,都會進行模擬。您可以透過修改用戶端應用程式的 Web.config 檔案,啟用在用戶端上的模擬:
<!-- Web.config file. -->
<identity impersonate="true"/>
[!附註]
預設會啟用模擬。
如需有關 ASP.NET 模擬的詳細資訊,請參閱 Microsoft.NET Framework SDK 文件集。
使用 SOAP API 管理報表伺服器。
您也可以使用 Web 應用程式來管理報表伺服器及其內容。Reporting Services 隨附的報表管理員,是完全使用 ASP.NET 與 Reporting Services SOAP API 建立的 Web 應用程式範例。您可以將報表管理員的報表管理功能加入自訂 Web 應用程式。例如,您可能會想要傳回報表伺服器資料庫中可用報表的清單,並將它們顯示在 ASP.NETListbox 控制項中,以供您的使用者選擇。下列程式碼會連接報表伺服器資料庫,並在報表伺服器資料庫中傳回項目的清單。接著會將可用的報表加入 Listbox 控制項,如此會顯示每個報表的路徑。
Private Sub Page_Load(sender As Object, e As System.EventArgs)
' Create a Web service proxy object and set credentials
Dim rs As New ReportingService2005()
rs.Credentials = System.Net.CredentialCache.DefaultCredentials
' Return a list of catalog items in the report server database
Dim items As CatalogItem() = rs.ListChildren("/", True)
' For each report, display the path of the report in a Listbox
Dim ci As CatalogItem
For Each ci In items
If ci.Type = ItemTypeEnum.Report Then
catalogListBox.Items.Add(ci.Path)
End If
Next ci
End Sub ' Page_Load
private void Page_Load(object sender, System.EventArgs e)
{
// Create a Web service proxy object and set credentials
ReportingService2005 rs = new ReportingService2005();
rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
// Return a list of catalog items in the report server database
CatalogItem[] items = rs.ListChildren("/", true);
// For each report, display the path of the report in a Listbox
foreach(CatalogItem ci in items)
{
if (ci.Type == ItemTypeEnum.Report)
catalogListBox.Items.Add(ci.Path);
}
}