C# バインディング

現在、Silk Performer は C# バインディングとして Kernel、Web、Browser BDL 関数をサポートします。Visual Studio で、Kernel.MeasureStart()Web.PageUrl()Browser.Click() などの C# クラスの静的メソッドを呼び出すことで、これらの関数にアクセスできます。

言い換えると、組み込みの Silk Performer .bdh ファイルそれぞれに対応する C# クラスが PerfRunDotNet アセンブリで見つかります。そして、.bdh ファイルで定義された API 関数それぞれに対応する静的メソッドが、これらの C# クラスで定義されています。

C# スクリプトの構造

Silk Performer の負荷テストで使用する C# クラスには、VirtualUser 属性と CodePage 属性が含まれます。VirtualUser では、UserName プロパティと ScriptName プロパティを指定します。CodePage では、記録システムのコードページを指定します。Transaction 属性を持つメソッドは、Silk Performer にエクスポートされたときにトランザクションにマップされます。

namespace SilkPerformerRecorder
{
  [VirtualUser(UserName = "VUser", ScriptName = "MyScript")]
  [CodePage(1252)]
  public class MyScript
  {
    [Transaction(ETransactionType.TRANSTYPE_INIT)]
    public void TInit()
    {
    }

    [Transaction(ETransactionType.TRANSTYPE_MAIN)]
    public void TMain()

データ型マッピング

.NET/C# と BDL 間でパラメータをやり取りするために、組み込みのデータ型を使用して変換が行われます。

文字列

Silk Performer と BDL はマルチバイト文字セット(MBCS)エンコードで処理されますが、C# 言語は Unicode で処理されます。つまり、これらの間で文字列を渡すときには変換が必要になります。PerfRunDotNet アセンブリは BdlString クラスを使用することで、このようなすべての変換を処理します。さらに、バイナリ バッファの処理も行います。利便性のため、BdlString クラスと C# 文字列の間には代入互換性があります。

sizespec 変数と lenspec 変数は C# マッピングでは削除されました。 これは、C# 文字列自身が長さを持つためです。

静的パラメータの値

深刻度パラメータなどの静的整数値は、それぞれ列挙型で置換されました。

フォーム

BDL フォームは、C# の BdlForm クラスにマップされます。

private static readonly BdlForm ZIP_SEARCH001 = new BdlForm()
    {
      Entries = new BdlFormEntries()
      {
        { "zip-search", "", Kernel.USE_HTML_VAL }, // hidden, unchanged, value: "zip-search"
        { "zip-search:zipcode", "", Kernel.USE_HTML_VAL }, // unchanged, value: ""
        { "javax.faces.ViewState", "", Kernel.USE_HTML_VAL }, // hidden, unchanged, value: "j_id3:j_id4"
        { "zip-search:search-zipcode.x", "62" }, // added
        { "zip-search:search-zipcode.y", "4" } // added
      }
    };

コードページを使用した再生

Silk Performer は MBCS ベースのアプリケーションであるため、Recorder は C# スクリプトに CodePage 属性を自動的に生成し、.BDF スクリプト スタブに引き継ぎます。また、システムのコードページで表現できない Unicode 文字列は 16 進バイト配列に変換されます。

CodePage 属性が C# スクリプトで定義されている場合、次のように処理されます。

  • プロジェクトのすべてのクラスで同じコードページを持つ必要があります。
  • C# スクリプトで使用する文字すべてが、そのコードページを使用して MBCS 文字列に変換されます。
  • 定義されたコードページは C# 文字列(Unicode)から MBCS 文字列の変換と、Recorder によって生成されたバイト配列の解釈に使用されます。従って、表現できない文字があり 16 進バイト配列を Recorder が生成した場合は特に、CodePage 属性を設定する必要があります。
  • すべての文字が定義されたコードページで機能することをコンパイル時に確認されます。

CodePage 属性が C# スクリプトで定義されていない場合、システムのコードページが再生に使用されます。