目次＞第3章 サンプルアプリケーション構築 > 3.1 XML通信

# 3.1 XML通信

## 1 概要

本節では、Server Frameworkが提供するリクエストコントローラ機能を用いて、クライアント・サーバ間でXML電文の送受信を行う方法を説明する。
リクエストコントローラ機能は、クライアントから送信されたXML電文を受信してビジネスロジックの入力データセットに変換する処理、ビジネスロジック実行処理、ビジネスロジックの出力データセットをXML電文に変換してクライアントに返却する処理を順番に実行する。ビジネスロジックのインスタンスはServer Frameworkが提供するビジネスロジック生成機能を用いて生成する。詳細は、機能説明書『FB-01 リクエストコントローラ機能』、『CM-04 ビジネスロジック生成機能』を参照のこと。
業務開発者はビジネスロジックのコーディングのみを行うだけでよく、XML変換ロジックを記述する必要はない。

### 1.1 動作イメージ

図1.1-1 動作イメージ

- 対象画面
  - 計算画面
- 処理概要
  1. (クライアント)計算ボタンを押下すると、入力した数値Aと数値Bをサーバへ送信する。
  2. (サーバ)計算ビジネスロジックが数値を受け取り、数値の積を計算する。
  3. (サーバ)計算結果をクライアントへ送信する。
  4. (クライアント)サーバで実行された計算ビジネスロジックの結果を受信して、計算結果をテキストボックスに表示する。

#### 1.1.1 サーバが受信するリクエストの仕様

リクエストヘッダにはリクエスト名"calc"が設定される。リクエスト名によって実行されるビジネスロジックが決定される。 リクエストボディには、ユーザが計算画面で入力した数値Aと数値Bの情報がXMLとして設定される。

- リクエストヘッダ

表1.1.1-1 リクエストヘッダ内容

Key値 | Value値 | 内容
RequestName | calc | サーバで実行するビジネスロジックを特定するためのリクエスト名。サーバ側のビジネスロジック設定ファイルに定義するビジネスロジック名と対応する。

- リクエストボディ

      <CalcFormDs xmlns="http://com.example.dotnet/CalcFormDs.xsd">
        <CalcTable>
          <NumberA>12</NumberA>
          <NumberB>2</NumberB>
        </CalcTable>
      </CalcFormDs>

#### 1.1.2 サーバが送信するレスポンスの仕様

画面から入力された数値をもとにビジネスロジックで掛け算を行い、結果をXMLとして返却する。

- レスポンスボディ

      <CalcFormDs xmlns="http://com.example.dotnet/CalcFormDs.xsd">
        <CalcTable>
          <Answer>24</Answer>
        </CalcTable>
      </CalcFormDs>

## 2 作業手順

- 作成イメージ

図2-1 作業イメージ

1. ビジネスロジック入出力データセットの作成
2. ビジネスロジックの作成
3. ビジネスロジック設定ファイルの編集

### 2.1 ビジネスロジック入出力データセットの作成

クライアントから受信するリクエスト情報(XML電文)の内容を取得するためのビジネスロジック入力データセットを作成する。クライアントへ送信するレスポンス情報(XML電文)の内容を取得するためのビジネスロジック出力データセットも作成する。本チュートリアルでは、ビジネスロジック入力データセットおよび出力データセットは同じデータセットで定義する。XMLとデータセットの変換方法は4.3 XMLとデータセットの変換方法を参照のこと。

図2.1-1 CalcFormDs.xsdの実装例

表2.1-1 CalcFormDs.xsdの型

Table名 | Column名 | 型
CalcTable |  |
| NumberA | System.String
| NumberB | System.String
| Answer | System.Int32

表2.1-2 CalcFormDs.xsdのプロパティ設定一覧

プロパティ名 | 設定値 | 内容
Namespace | http://com.example.dotnet/CalcFormDs.xsd | 計算画面の画面データセットの名前空間。

### 2.2 ビジネスロジックの作成

掛け算処理を行うビジネスロジックを作成する。XML電文の送受信を行うビジネスロジックのため、必ずIBLogicインターフェイスを実装すること。

#### 2.2.1 ビジネスロジックの新規作成

ビジネスロジック(BLogic/CalcBLogic.cs)を新規作成する。

図2.2.1-1 ビジネスロジックのフォルダ構成図

表2.2.1-1 掛け算ビジネスロジックの内容

アセンブリ名 | 名前空間名 | クラス名
TutorialServerRich | TutorialServerRich.BLogic | CalcBLogic

#### 2.2.2 リクエストコントローラとビジネスロジック入力データセットの定義

ビジネスロジックには、Server Frameworkが実行するリクエストコントローラやビジネスロジック入力データセットの型を判断する属性を指定しなければならない。以下に設定する項目を示す。

表2.2.2-1 クラス属性の設定項目

属性 | プロパティ | 設定値 | 説明
ControllerInfo | RequestType | RequestTypeNames .NORMAL | クライアントからの要求に対して本ビジネスロジックを生成、実行するリクエストコントローラを指定する。 本ビジネスロジックではXML電文の送受信のため、"NORMAL"を指定する。ただし、XML電文の送受信の場合は省略も可能である。
ControllerInfo | InputDataSetType | typeof (CalcFormDs) | クライアントから受信するXML電文を、サーバ側で受け取るためのデータセットの型を指定する。ここで指定したデータセットがビジネスロジックの入力データセットとなる。省略は不可である。

CalcBLogic.cs

    /// <summary>
    /// 掛け算を行うビジネスロジックです。
    /// </summary>
    [ControllerInfo(RequestType=RequestTypeNames.NORMAL, InputDataSetType=typeof(CalcFormDs))]
    public class CalcBLogic : IBLogic
    {
      // メンバは後述で説明
    }

#### 2.2.3 ビジネスロジックの実装

IBLogicインターフェイスで定義しているExecuteメソッドに掛け算処理を実装する。

CalcBLogic.cs

    using System;
    using System.Configuration;
    using System.Data;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using TERASOLUNA.Fw.Common.BLogic;
    using TERASOLUNA.Fw.Web.Controller;
    using TERASOLUNA.Fw.Web.Validation;
    using TutorialServerRich.Dto;

    namespace TutorialServerRich.BLogic
    {
        /// <summary>
        /// 掛け算を行うビジネスロジックです。
        /// </summary>
        [ControllerInfo(RequestType = RequestTypeNames.NORMAL, InputDataSetType = typeof(CalcFormDs))]
        public class CalcBLogic : IBLogic
        {
            /// <summary>
            /// 掛け算を行うビジネスロジックです。
            /// </summary>
            /// <param name="param">ビジネスロジック入力クラス</param>
            /// <returns>ビジネスロジック結果クラス</returns>
            public BLogicResult Execute(BLogicParam param)
            {
                // 掛け算を行うための値の取得
                CalcFormDs inputDs = param.ParamData as CalcFormDs;
                int numberA = Int32.Parse(inputDs.CalcTable[0].NumberA);
                int numberB = Int32.Parse(inputDs.CalcTable[0].NumberB);

                // 掛け算の実行
                int answer = numberA * numberB;

                // 掛け算ビジネスロジック結果クラスに格納するデータセットの作成
                CalcFormDs outputDs = new CalcFormDs();
                outputDs.CalcTable.AddCalcTableRow(null, null, answer);

                // 掛け算ビジネスロジックの結果クラスの作成
                return new BLogicResult(BLogicResult.SUCCESS, outputDs);
            }
        }
    }

### 2.3 ビジネスロジック設定ファイルの編集

ビジネスロジック設定ファイル(Config\BLogicConfiguration.config)に掛け算ビジネスロジックのビジネスロジック名とアセンブリ修飾名を設定する。ビジネスロジック名はリクエスト名と一致させること。掛け算処理のリクエスト名は、サーバが受信するリクエストの仕様を参照すること。

BLogicConfiguration.config

    <?xml version="1.0" encoding="utf-8" ?>
    <!-- ビジネスロジック設定ファイル -->
    <blogicConfiguration xmlns="http://www.terasoluna.jp/schema/BLogicSchema.xsd">

      <!-- 掛け算ビジネスロジック -->
      <blogic name="calc" type="TutorialServerRich.BLogic.CalcBLogic, TutorialServerRich" />

    </blogicConfiguration>

## 3 動作確認

1. サーバアプリケーションを起動する(TutorialServerRichプロジェクトの発行)。
2. クライアントアプリケーションを起動する(TutorialClient.exeの押下)。
3. ユーザID "tera"、パスワード "soluna" と入力し、ログオンボタンを押下する。

図3-1 ログオン画面⇒メニュー画面

4. 計算画面ボタンを押下する。

図3-2 メニュー画面⇒計算画面

5. 数値Aに "12",数値Bに "2" を入力後、計算ボタンを押下し、解に掛け算結果"24"が表示されることを確認する。

図3-3 計算画面(計算前)⇒計算画面(計算後)

次節：3.2 ファイルアップロード通信