12.8 CSV を生成しファイルシステムへ保存するサンプル(WCF)
概要
CSV を生成しファイルシステムへ保存するサンプルです。
ソースサンプル
<biz-Stream_home>/sample/soap_client/dotNET/wcf/WSS_WCF_Sample7.aspx.cs
using System;
using System.IO;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Web;
using BizStreamWebApplication.BizStreamServiceReference;
namespace BizStreamWebApplication
{
public partial class WSS_WCF_Sample7 : 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 + "\\soap_client\\xml\\Sample6.xml";
// 出力ファイル名
const string OUTPUT_FILE = @"C:\\Temp\\WSS_WCF_Sample7.csv";
protected void Page_Load(object sender, EventArgs e)
{
// データの生成
byte[] data = generate();
// バイト配列をファイルにすべて書き込む
File.WriteAllBytes(OUTPUT_FILE, data);
// ブラウザに結果を表示
Response.Clear();
Response.ContentType = "text/html;charset=UTF-8";
Response.Write("<HTML><HEAD><TITLE>WSS_WCF_Sample7</TITLE></HEAD><BODY>");
Response.Write("正常終了しました。<BR>");
Response.Write("ファイルパス:" + OUTPUT_FILE);
Response.Write("</BODY></HTML>");
Response.Flush();
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();
request.dataType.Item = new csv();
// レイアウト定義を設定
request.layoutData = new layoutDefinition[1];
request.layoutData[0] = new layoutDefinition();
request.layoutData[0].uri = LAYOUT_FILE;
// リクエストを送信
fileData data = client.generateData(request);
/*
* CSV出力はFileData#getContentDataGroup()よりBase64Binaryの配列を取得する
* (CSVの1行が1配列要素となっている)
* また、出力エンコーディングはUTF-8となるので注意
*/
// データサイズの計算
base64Binary[] list = data.contentDataGroup.contentData;
int size = 0;
for (int i = 0; i < list.Length; i++)
{
base64Binary base64 = list[i];
byte[] lineData = base64.Value;
size += lineData.Length;
}
// CSVデータの連結
MemoryStream stream = new MemoryStream();
using (BinaryWriter writer = new BinaryWriter(stream))
{
for (int i = 0; i < list.Length; i++)
{
base64Binary base64 = list[i];
byte[] lineData = base64.Value;
writer.Write(lineData);
}
}
return stream.ToArray();
}
}
}
