.NET サーバ オブジェクト エクステンションの 10.1 への移行
.NET サーバ オブジェクト エクステンション(SOE)を 10.1 に移行するには、既存の SOE コードの大半を REST または SOAP SOE 用の 10.1 Visual Studio テンプレートにコピーする必要があります。この作業が必要になるのは、10.1 テンプレートに *.soe ファイルを作成するためのパッケージ ロジックが含まれているからです。10.1 で新たに配置されたこのファイルにより、SOE を 1 つのステップで ArcGIS Server に配置できます。*.soe ファイルは、プロジェクトを構築したときに作成されます。
10.1 テンプレートのもう 1 つの利点は、参照が 10.1 ArcObjects SDK に付属するプライマリ相互運用アセンブリをすでにポイントしていることです。このテンプレートに含まれていない参照が必要なプロジェクトでは、それらの参照を手動で追加する必要があります。
ArcGIS Server Local(DCOM)接続に依存する 10.0 以前のバージョンで作成された SOE は、バージョン 10.1 では使用できません。それらの SOE は REST または SOAP Web サービスとして機能するようにリファクタリングする必要があります。
以下に、SOE を 10.0 から 10.1 に移行する手順を示します。
- SOE をコンピュータに登録している場合は、regasm <DLL のパス> /codebase /u などのコマンドを使用して登録を解除します。
- Visual Studio 2010 を開いて、[ファイル] → [新規作成] → [プロジェクト] の順にクリックします。
- [インストールされたテンプレート] ツリーで [Visual C#] → [ArcGIS] → [サーバ オブジェクト エクステンション] の順に展開します。
- [新しいプロジェクト] ダイアログ ボックスの最上部で、ドロップダウン メニューから [.NET Framework 3.5] を選択します。
- REST または SOAP テンプレートを選択し、SOE の名前と場所を入力して [OK] をクリックします。
- プロジェクトで必要な参照とディレクティブがまだテンプレートに含まれていない場合は、追加します。
- テンプレート コードで、.NET 属性の ServerObjectExtension を変更して、SOE のケーパビリティ、説明、表示名、プロパティ、サポートされる Web サービス アーキテクチャを含めます。これらは、10.1 より前のバージョンで SOE 登録コードに設定していた種類の値です。C# の例は次のようになります。
[ServerObjectExtension("MapServer", AllCapabilities = "GetCommonInfo;GetSecretInfo", DefaultCapabilities = "GetCommonInfo", Description = "An example SOE for the help system", DisplayName = "My Sample SOE", Properties = "PropertyA=500;PropertyB=Cities", SupportsREST = true, SupportsSOAP = false)]
上の SOE には、GetCommonInfo および GetSecretInfo という 2 つの利用可能なケーパビリティがあります。ただし、GetCommonInfo だけがデフォルトで有効にされます。
同様に、この SOE には、Property A(デフォルト値は 500)と PropertyB(デフォルト値は Cities)という 2 つのプロパティがあります。すべてのプロパティが最初は文字列として扱われます。
- クラス コード全体(ただしクラス宣言は除く)を 10.1 より前の SOE からコピーして、テンプレートの対応するコードを置き換えます。10.1 SOE が ServicedComponent から取得されておらず、System.EnterpriseServices への参照を必要としない点を除いて、10.1 のボイラープレート クラス コードは 10.0 コードと同じです。完全にコピーし、貼り付ける場合には、これらのアイテムを削除する必要があります。10.1 のテンプレートとサンプルを参考にすることができます。
下の例は、REST SOE を移行するときに、削除し、10.0 コードに置き換えるものを示しています。
public class MySampleSOE : IServerObjectExtension, IObjectConstruct, IRESTRequestHandler { // Delete 10.1 template code and paste your // corresponding 10.0 code here. }
10.1 SOE の名前が 10.0 SOE と異なる場合は、コンストラクタで SOE の名前を更新する必要があります。
public MySampleSOE() { soe_name = this.GetType().Name; logger = new ServerLogger(); reqHandler = new SoeRestImpl(soe_name, CreateRestSchema()) as IRESTRequestHandler; }
- ソリューションを保存し、プロジェクトを構築します。構築に成功すると、プロジェクトの bin ディレクトリの下に *.soe ファイルが作成されます。
- 「サーバ オブジェクト エクステンションの配置」の手順に従って、SOE を ArcGIS Server に配置します。