Skip To Content

将 10.0 .NET 服务器对象扩展迁移至更高版本

使用 ArcGIS 10.1 开发的 .NET 服务器对象扩展 (SOE) 可用于 10.2 及更高版本中。 但是,使用 10.0 版本开发的 SOE 迁移起来比较麻烦。 本主题的其余部分将介绍如何迁移 SOE 10.0 版本,以便使其能够在 10.1 及更高版本中使用。

迁移 10.0 版本的 .NET 服务器对象扩展 (SOE) 需要将大部分现有 SOE 代码复制到 REST SOE 或 SOAP SOE 的 Visual Studio 模板中。 需要执行此操作是因为模板包含了创建 .soe 文件所需的打包逻辑。 此文件在 10.1 版本中被引用,它允许您在一个步骤内将 SOE 部署到 ArcGIS Server 中。 构建项目时,将创建 .soe 文件。

模板的另一个优势是引用已经指向了 ArcObjects SDK 附带的主互操作程序集。 如果您的项目需要的任何未包括在模板中的引用,您需要手动添加这些引用。

在 10.0 版本以及之前版本中创建的基于 ArcGIS Server Local (DCOM) 连接的 SOE 无法在 10.1 及更高版本中使用。 应将这些 SOE 重构为 REST 或 SOAP Web 服务。

以下是迁移 10.0 版本 SOE 的步骤:

  1. 如果之前已在计算机上注册了 SOE,则使用类似 regasm <DLL 的路径> /codebase /u 的命令将其注销。
  2. 打开 Visual Studio 2010,然后单击 文件 > 新建 > 项目.
  3. 在“安装的模板”树中,展开 Visual C# > ArcGIS > 服务器对象扩展模块.
  4. 新建项目对话框顶部,从下拉列表菜单中选择 .NET Framework 3.5
  5. 选择 REST 或 SOAP 模板,为 SOE 输入名称和位置,然后单击确定
  6. 添加项目需要的但未包括在模板中的任何引用和指令。
  7. 在模板代码中,将 .NET 属性 ServerObjectExtension 修改为包含 SOE 的功能、描述、显示名称、属性和支持的 Web 服务架构。 这些是在 10.0 版本和之前版本的 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。 但是,默认情况下仅启用 GetCommonInfo。

    同样,此 SOE 有两个属性:PropertyA,其默认值为 500;PropertyB,其默认值为 Cities。 所有属性最初都将视为字符串。

  8. 从 10.0 SOE 中复制所有类代码(类声明除外),然后替换模板中对应的代码。 样本类代码与 10.0 版本中的代码相同,不同的是 10.1 及更高版本的 SOE 不是从 ServicedComponent 派生出来的,也不需要引用 System.EnterpriseServices。 如果要执行完整的复制和粘贴,则需要将这些项移除。 可以将模板和样本用作指南。

    下列示例显示了迁移 REST SOE 时,应删除和替换的 10.0 版代码中的项目。

    public class MySampleSOE : IServerObjectExtension, IObjectConstruct, IRESTRequestHandler
        {
           // Delete 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;
            }
  9. 保存您的解决方案并构建项目。 构建成功后将在项目的 bin 目录下创建一个 .soe 文件。
  10. 根据部署扩展模块中的说明,将 SOE 部署到 ArcGIS Server 上。