2012年5月22日 星期二

ASP.NET 顯示 Report Service 的報表(番外) - Web Service, Reporting Service

上次研究如何使用新版的 Reporting Service 2008 的時候,意外發現新版的疑似好像能用 Web service 的方式來叫用報表。所以繼上次的
以上這兩篇外,試著改用 Web Service 的方式來試試看,也促使這次番外篇的撰寫。

 首先要介紹一下麼是 Web Service ,最近看一篇文章,我覺得講得還不賴,所以就不再多做著墨。可以詳看這篇文章 webservice系列教學(1)




1.使用 VS 2010 建立網站後,在專案網站點擊右鍵,選擇 [加入服務參考...] 。

2.因為服務係屬 2008 版本的服務,點選下方 [進階...] 部分。

3.選擇下方 [相容性] ,選擇 [加入 web 參考...]。

4.在URL的部分,輸入您報表的服務位址,如果是本機,請輸入以下位址。
http://localhost/ReportServer/ReportExecution2005.asmx?wsdl


5.輸入完畢後,點擊 [=>] 符號 ,並重新命名 [ Web 參考名稱 ] ,筆者此次命名為 RPReport ,輸入完畢點選 [加入參考] 。

5.因為這次鏈結有字串(String)參數 TitleName 要傳送,新增一 標準 >> TextBox 控制項以及 Button 控制項處理確認鏈結,如下圖。
6.雙擊 Button 控制項,進行事件 Button1_Click 程式碼的撰寫。
    protected void Button1_Click(object sender, EventArgs e)
    {
        RPReport.ReportExecutionService res = new RPReport.ReportExecutionService();

        res.Credentials = new NetworkCredential("帳號", "密碼");
        res.Url = @"http://localhost/reportserver/ReportExecution2005.asmx";

        // Setting Report Name          
        string ReportName = @"/RPReport";
        string historyID = null;

        Byte[] results;
        string format = "Excel"; //XML, NULL, CSV, IMAGE, PDF, HTML4.0, HTML3.2, MHTML, EXCEL, and HTMLOWC
        string deviceInfo = null;
        string extension = String.Empty;
        string mimeType = String.Empty;
        string encoding = String.Empty;
        RPReport.Warning[] warnings = null;
        string[] streamIDs = null;

        // 欲儲存的位址
        string fileName = Server.MapPath(@"~/test.xls");

        RPReport.ExecutionInfo ei = res.LoadReport(ReportName, historyID);

        // 參數設定
        RPReport.ParameterValue[] rptParameters = new RPReport.ParameterValue[1];

        rptParameters[0] = new RPReport.ParameterValue();
        rptParameters[0].Name = "TitleName";
        rptParameters[0].Value = this.TextBox1.Text;

        res.SetExecutionParameters(rptParameters, "en-us");


        results = res.Render(format, deviceInfo, out extension, out mimeType, out encoding, out warnings, out streamIDs);

        // 儲存檔案
        using (FileStream stream = File.Create(fileName, results.Length))
        {
            stream.Write(results, 0, results.Length);
        }
        Response.Redirect("~/test.xls");
     
    }


7.便可以利用 Web Service 來存取 Reporting Service ,以方便下載檔案。

這次的重點在Reporting Service 2008 的 Web Service 是隸屬於舊版 Framework 2.0 ~ 3.5 版的服務,也就是副檔名為 (.asmx)。而非後起 Framework 4.0 副檔名為 (.svc) 的 Windows Communication Foundation (WCF), 在呼叫上要回到舊版,避免不能使用。

ReportExecutionService Class
什麼是web service






沒有留言:

張貼留言