将 .NET 服务器对象扩展迁移至 10.1 版本

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

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

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

以下是将 SOE 从 10.0 迁移至 10.1 的步骤:

步骤:
  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.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。但是,默认情况下仅启用 GetCommonInfo。

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

  8. 从 10.1 之前版本的 SOE 中复制所有类代码(类声明除外),然后替换模板中对应的代码。10.1 版本中的样本类代码与 10.0 版本中的代码相同,不同的是 10.1 版本的 SOE 不是从 ServicedComponent 派生的,也不需要引用 System.EnterpriseServices。如果要执行完整的复制和粘贴,则需要将这些项移除。可以将 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;
            }
    
  9. 保存您的解决方案并构建项目。构建成功后将在项目的 bin 目录下创建一个 .soe 文件。
  10. 根据部署服务器对象扩展中的说明,将 SOE 部署到 ArcGIS Server 上。
9/15/2013