開発環境構成
Windows 10 64bit環境において、Visual Studio 2019、ArcGIS Engine 10.8、.NET Framework 4.8、IIS 10を基盤にC#による実装を実施。既存のデスクトップGISアプリケーションで動作する空間解析機能をWeb経由でJavaシステムと連携するためのアーキテクチャを構築。
Webサービス実装のポイント
ASP.NET Webサービスプロジェクト作成後、サービス定義ファイルの名前空間を標準値から変更:
[WebService(Namespace = "http://gis-analysis.example/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class SpatialAnalysisService : System.Web.Services.WebService
{
[WebMethod(Description = "管路障害シミュレーション実行")]
public string ExecutePipelineAnalysis(double longitude, double latitude)
{
// ArcObjectsによる空間処理の実装
var analysisEngine = new NetworkAnalyzer();
var result = analysisEngine.SimulateFailure(longitude, latitude);
// データセットのXMLシリアライズ
var serializer = new XmlSerializer(typeof(AnalysisResult));
using var writer = new StringWriter();
serializer.Serialize(writer, result);
return writer.ToString();
}
}
デプロイメント手順
IISの既定サイトディレクトリ(C:\inetpub\wwwroot)にビルド成果物を配置。アプリケーションプールを.NET Framework v4.0に設定し、認証モードを匿名アクセス可能に調整。サービスの有効化後、http://localhost/SpatialAnalysisService.asmx でエンドポイントを確認。
クライアント連携の実装パターン
Javaシステムからの呼び出しを想定し、シリアライズ形式とパラメータ設計に留意:
// .NETクライアント実装例
var analyzer = new SpatialAnalysisService();
analyzer.Url = "http://gis-server/SpatialAnalysisService.asmx";
// XML応答の逆シリアル化
var resultXml = analyzer.ExecutePipelineAnalysis(139.76, 35.68);
var serializer = new XmlSerializer(typeof(AnalysisResult));
using var reader = new StringReader(resultXml);
var result = (AnalysisResult)serializer.Deserialize(reader);
複雑なオブジェクト型はすべてXML互換形式に変換。out/refパラメータは使用せず、単純データ型のみをインターフェースに定義。IFeatureClass等のArcObjects型はカスタムシリアライザで変換処理を実装。
相互運用性の確保
Javaシステムとの互換性向上のため、WSDLドキュメントの整合性を検証。SOAPメッセージのエンベロープ構造を標準準拠に保ち、日付フォーマットや数値精度を明示的に制御。IISのMIME設定でtext/xmlの送信を許可し、クロスオリジンリクエストの制限を解除。