SSIS 脚本任务“无效强制转换异常”从变量中检索复杂对象

SSIS Script task `Invalid cast exception` at retrieving complex object from variables

先决条件:

我想在程序包执行开始时连接到 MS Dynamics CRM Web 服务并在整个程序包中重复使用该连接,但我无法通过 SSIS 变量做到这一点。

我无法使用连接管理器,因为我使用了 OrganizationService.Execute WebService 任务向导不支持的方法

步骤:

  1. 向 GAC 和脚本引用添加了 Microsoft.Xrm.Sdk dll;
  2. 在里面创建了数据流任务和两个独立的脚本任务
  3. 创建了 2 个包变量 crmOrganizationServicecrmOrganizationServiceProxy
    • 两者都是 System.Object
    • 类型
    • script task 1script task 2 可以读写它们
  4. script task 1内部:

    • 实例化 OrganizationServiceProxyOrganizationService 并连接到 MS Dynamics CRM Web 服务。
    • 将对象的两个实例分配给变量

      //create public OrganizationServiceProxy _serviceProxy = new OrganizationServiceProxy(orgServiceManagement, adCredentials); public IOrganizationService _service =(IOrganizationService)_serviceProxy; //assign this.Variables.crmOrganizationServiceProxy= _serviceProxy; this.Variables.crmOrganizationService=_service;

  5. script task 2内部:

    OrganizationServiceProxy _serviceProxy = (OrganizationServiceProxy)this.Variables.crmOrganizationServiceProxy

错误:

在第 5 步,我收到无效转换异常,因为无法将 System.Object 转换为 Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy

解决方法:

我确定问题出在脚本任务之间传递变量时的基本变量装箱中。但是我没有找到更好的通用方法。在其中,我需要在脚本任务之间传递自定义 类 的实例。

您可以使用 Reflection or a custom SSIS component,但这样做可能不值得。

另一种选择是在您的 SSIS 包和 CRM 之间托管一个临时 Web 服务,并在 Web 服务中缓存连接。也许这对你来说容易多了。