Azure Service Busトリガーチュートリアル - C#ライブラリの使用方法

Azure Service Busトリガー C#ライブラリとは

Azure Service Busトリガーに付属するC#ライブラリを呼び出すことで、Microsoft Azureアプリケーション(WebロールもしくはWorkerロール)からAzure Service Busトリガーに対してメッセージを送信し、トリガーを発火させることができます。
C#ライブラリの詳細なAPIリファレンスについては、「C#ライブラリ APIリファレンス」を参照してください。

C#ライブラリの使用方法

環境設定

C#ライブラリを使用したMicrosoft Azureアプリケーション開発を行うためには、以下の環境が必要となります。

使用するために必要な情報

Azure Service Busトリガーとのメッセージの送受信を行うためには、以下の情報が必要となります。

開発の流れ

C#ライブラリを使用したMicrosoft Azureアプリケーション開発は、以下のような流れで行います。
  1. Microsoft Visual Studio上のMicrosoft Azure C#アプリケーション(WebロールもしくはWorkerロール)で、必要なモジュールに参照を追加する
  2. トリガーを発火させる処理を実装する(詳細については、「C#プログラムからの使用」を参照してください)
  3. 開発したアプリケーションをMicrosoft Azure上にサービスとしてデプロイする

C#プログラムからの使用

参照設定

C#ライブラリを使用したC#プログラムを実装するためには、以下の2つのモジュールへの参照を追加する必要があります。
いずれのライブラリも、参照設定のプロパティで「ローカルコピー」を「True」に設定する必要があります。

プログラムの流れ

  1. 接続情報を指定して、AppFabricTriggerServiceのインスタンスを生成します。
  2. AppFabricTriggerServiceのPutParamメソッドを使用して、スクリプト入力変数に渡すパラメータを指定します。
  3. AppFabricTriggerServiceのExecuteメソッドを呼び出して、メッセージ送信を行いトリガーを発火させます。
  4. Executeメソッドの返り値として、ExecutionResponseのインスタンスを取得し、スクリプト実行結果を取得します。
  5. 実行に成功した場合、ExecutionResponseからスクリプト出力変数の値を取得します。
  6. 実行に失敗した場合、ExecutionFailureからエラー情報を取得します。

サンプルプログラム

以下のサンプルプログラムでは、ExecuteDataSpiderServiceメソッドでスクリプト入力変数に値すパラメータを3つ指定してAzure Service Busトリガーを発火させています。
処理に成功した場合は、スクリプト出力変数の値を3つ取得しています。
処理に失敗した場合は、エラー情報を取得しています。
なお、取得した値やエラー情報を用いた処理、およびC#ライブラリの使用に直接関係の無い箇所は省略しています。
using System;
・・・・(中略)・・・
//usingディレクティブにC#ライブラリの名前空間を指定 
using Appresso.DataSpider.Service;
	
public class AppFabricTriggerTest 
{

	・・・・(中略)・・・
	
	public void ExecuteDataSpiderService ()
	{
		// AppFabricTriggerServiceインスタンスの生成
		AppFabricTriggerService service = new AppFabricTriggerService (
			"serviceNamespace",  // サービス名前空間(Service Namespace)の指定
			"servicePath", // サービスパス(Service Path)の指定
			"defaultIssuer", // 既定の発行者(Default Issuer)の指定
			"defaultKey"); // 既定のキー(Default Key)の指定

		// 文字列型のスクリプト入力変数「string_in」に渡すパラメータを設定
		string string_in = "文字列入力";
		service.PutParam("string_in", string_in);

		// 整数型のスクリプト入力変数「int_in」に渡すパラメータを設定
		int int_in = 200;
		service.PutParam("int_in", int_in);
		
		// 真偽値型のスクリプト入力変数「boolean_in」に渡すパラメータを設定
		bool boolean_in = True;
		service.PutParam("boolean_in", boolean_in);

		// Executeメソッドを呼び出してトリガーを発火させ、ExecutionResponseを取得する
		ExecutionResponse response = service.Execute();
		
		// ExecutionResponseから終了ステータスを取得
		int exitStatus = response.ExitStatus;
		
		// ExecutionResponseから処理に成功したかどうかを取得
		bool succeeded = response.Succeeded;
		
		if (succeeded)
		{
			// 処理が成功した場合
			
			// スクリプト出力変数の情報を持つDictionary型のインスタンスをExecutionResponseのResultsプロパティから取得
			Dictionary<string, object> results = response.Results;
			
			// 文字列型のスクリプト出力変数「string_out」から値を取得
			string string_out = (string )results["string_out"];
			
			// 整数型のスクリプト出力変数「int_out」から値を取得
			int int_out = (int)results["int_out"];
			
			// 真偽値型のスクリプト出力変数「boolean_out」から値を取得
			bool boolean_out = (bool)results["boolean_out"];
			
			・・・・(取得した値を使用した処理は中略)・・・
		}
		else
		{
			// 処理が失敗した場合
			
			// エラー情報を持つExecutionFailureインスタンスをExecutionResponseのFailureプロパティから取得
			ExecutionFailure faillure = response.Failure;
			
			// エラーのタイプを取得
			string failureType = faillure.Type;
			
			// エラーのメッセージを取得
			string failureMessage = faillure.Message;
			
			// エラーの詳細を取得
			string failureMessage = faillure.Message;
			
			・・・・(取得したエラー情報を使用した処理は中略)・・・
			
		}
	}
	・・・・(中略)・・・
}

スクリプト入力変数に値を渡すには

AppFabricTriggerServiceのPutParamメソッドを使用して、スクリプト入力変数に値を渡すためのパラメータを指定します。

PutParamメソッドの第一引数には、対象のスクリプト入力変数名を渡します。
PutParamメソッドの第二引数には、C#の型で値を渡します。
このC#の型は、対象のスクリプト入力変数の型と対応する型である必要があります。

スクリプト入力変数の型とC#の型の対応は以下の通りです。

スクリプト入力変数の型 対応するC#の型 備考
文字列型 string  
整数型 int  
10進数型 decimal  
日付/時間型 System.DateTime ミリ秒より小さい桁の値は切り捨てられます。
真偽値型 bool  
バイナリ型 byte[]  
XML型 System.Xml.XmlDocument  

スクリプト出力変数の値を取得するには

AppFabricTriggerServiceのResultsプロパティから、スクリプト出力変数に値を保持するDictionary型のインスタンスを取得することができます。

このDictionaryからは、スクリプトの出力変数名をキーに値を取得できます。
取得時に、スクリプト出力変数の型に対応するC#の型にキャストする必要があります。

スクリプト出力変数の型とC#の型との対応は以下の通りです。

スクリプト出力変数の型 対応するC#の型 備考
文字列型 string  
整数型 int  
10進数型 decimal  
日付/時間型 System.DateTime  
真偽値型 bool  
バイナリ型 byte[]  
XML型 System.Xml.XmlDocument  

主な例外

AppFabricTriggerServiceのExecuteメソッドを呼び出した際に、例外が発生することがあります。
発生する主な例外と原因、および対策は以下の通りです。

例外名 原因 対策
System.IdentityModel.Tokens.SecurityTokenException
The token provider was unable to provide a security token.
Azure Service Busサービスとの接続に失敗しました。 AppFabricTriggerServiceに指定したサービス名前空間(Service Namespace)を確認してください。
System.ServiceModel.EndpointNotFoundException
Message could not be created: NotFound, No service is hosted at the specified address.
Azure Service Busサービスが見つかりませんでした。 以下のことを確認してください。
  • AppFabricTriggerServiceに指定したサービスパス(Service Path)が正しいか
  • 対象のAzure Service Busトリガーが存在するDataSpiderServerが起動しているか
  • 対象のAzure Service Busトリガーが有効になっているか
System.IdentityModel.Tokens.SecurityTokenException
The token provider was unable to provide a security token. Error:Code:401:SubCode:T2001:Detail:The issuer does not exist, or the secret or signature is invalid.
Azure Service Busサービスの認証に失敗しました。 AppFabricTriggerServiceに指定した既定の発行者(Default Issuer)および既定のキー(Default Key)を確認してください。
System.TimeoutException
Message could not be retrieved: NoContent, No message available within the specified timeout.
Azure Service Busトリガーからのメッセージ受信に失敗しました。 以下のことを確認してください。
  • 実行スクリプトの処理に時間がかかっていないか
    時間のかかるスクリプトである場合、AppFabricTriggerServiceのRetrieveTimeoutSecプロパティとRetrieveRetryTimesプロパティを適当な値に設定してください。
  • DataSpiderServerでエラーが発生していないか
    サーバログにエラー情報が記録されていないか確認してください。