biz-Streamマニュアル Webサービスサーバ ガイド 第12章 サンプルプログラム(.NET) 12.6 Excel を生成しブラウザでダウンロードさせるサンプル(WCF)

12.6 Excel を生成しブラウザでダウンロードさせるサンプル(WCF)

概要

Excel を生成しブラウザでダウンロードさせるサンプルプログラムです。


環境準備

事前に『2.7 クライアントアプリケーションの環境構築』を確認してください。


サンプル構成

項目 ファイルパス
ページレイアウトサンプル <bswss-client_home>/sample/xml/Sample6.xml サンプル1
ソースサンプル <bswss-client_home>/sample/dotNET/wcf/WSS_WCF_Sample6.aspx.cs サンプル1

ソースサンプル


using System;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Web;
using BizStreamWebApplication.BizStreamServiceReference;

namespace BizStreamWebApplication
{
    public partial class WSS_WCF_Sample6 : System.Web.UI.Page
    {
        // Webサービスサーバのホスト名
        const string WSS_HOST_NAME = "wsssrv";

        // Webサービスサーバ上のサンプルディレクトリの場所
        const string WSS_BIZSTREAM_SAMPLE_DIR = "\\bs\\sample";

        // Webサービスのエンドポイントプリフィックス
        const string WSS_SERVICE_LOCATION = "http://" + WSS_HOST_NAME + ":8080/axis2/services";

        // BASIC認証のユーザ名
        const string USER_NAME = @"bizuser1";

        // BASIC認証のパスワード
        const string PASSWORD = @"bizuser1";

        // 監査ロギング用のユーザ定義
        const string USER_DEF = "AAA";

        // 入力レイアウト定義ファイル名
        const string LAYOUT_FILE = WSS_BIZSTREAM_SAMPLE_DIR + "\\xml\\Sample6.xml";

        // ダウンロードファイル名
        const string DOWNLOAD_FILE_NAME = "WSS_WCF_Sample6.xlsx";
        // const string DOWNLOAD_FILE_NAME = "WSS_WCF_Sample6.xls";


        protected void Page_Load(object sender, EventArgs e)
        {
            // データの生成
            byte[] data = generate();

            // HTTPヘッダを設定する
            Response.Clear();
            Response.HeaderEncoding = System.Text.Encoding.GetEncoding("SJIS");
            Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";  // xlsxファイル形式
            // Response.ContentType = "application/vnd.ms-excel";                                        // xlsファイル形式
            Response.AppendHeader("Content-length", data.Length.ToString());
            Response.AppendHeader("Accept-Ranges", "bytes");
            Response.AppendHeader("Content-Disposition", "attachment; filename=\"" +
                DOWNLOAD_FILE_NAME + "\"");
            Response.Flush();

            // PDFをストリームに書き出す
            Response.BinaryWrite(data);
            HttpContext.Current.ApplicationInstance.CompleteRequest();
        }

        private byte[] generate()
        {
            // クライアントを生成
            bizstreamPortTypeClient client =
                new bizstreamPortTypeClient("BizstreamSOAP11port",
                    WSS_SERVICE_LOCATION + "/bizstream?UserDef=" + USER_DEF);

            // 認証の設定
            BindingElementCollection elements = client.Endpoint.Binding.CreateBindingElements();
            elements.Find<HttpTransportBindingElement>().AuthenticationScheme =
                System.Net.AuthenticationSchemes.Basic;
            client.ClientCredentials.UserName.UserName = USER_NAME;
            client.ClientCredentials.UserName.Password = PASSWORD;

            // MTOMを有効化
            elements.Remove<TextMessageEncodingBindingElement>();
            MtomMessageEncodingBindingElement mtom = new MtomMessageEncodingBindingElement();
            mtom.ReaderQuotas.MaxStringContentLength = 100000;
            elements.Insert(0, mtom);
            elements.Find<HttpTransportBindingElement>().KeepAliveEnabled = false;
            client.Endpoint.Binding = new CustomBinding(elements);

            // リクエストメッセージの作成
            generateDataRequest request = new generateDataRequest();

            // 出力ファイルの種類を設定
            request.dataType = new dataType();
            excel _excel = new excel();
            // _excel.multisheet = "true";  // 1ページ毎にシートを分ける
            _excel.format = excelFormat.xlsx;   // xlsxファイル形式
            // _excel.format = excelFormat.xls; // xlsファイル形式
            _excel.formatSpecified = true;
            request.dataType.Item = _excel;

            // レイアウト定義を設定
            request.layoutData = new layoutDefinition[1];
            request.layoutData[0] = new layoutDefinition();
            request.layoutData[0].uri = LAYOUT_FILE;

            // リクエストを送信
            fileData data = client.generateData(request);

            return data.contentData.Value;
        }
    }
}