0

我创建了一个 SSIS 包,它有一个 ScriptTask 来调用 REST API。

以下是我在 SSIS 包中编写的 C# 脚本任务:

public void Main()
{            
    string serviceHostUrl = Dts.Variables["ParameterTestServiceHostURL"].Value.ToString();            
    string serviceHostApiKey = Dts.Variables["ParameterTestServiceHostApiKey"].Value.ToString();
    string apiName = Dts.Variables["ParameterApiName"].Value.ToString();
    string serviceHostApiEndPoint = String.Format("{0}/json/reply/{1}", serviceHostUrl, apiName);
    string requestData = Dts.Variables["ParameterRequestData"].Value.ToString();
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceHostApiEndPoint);
    request.Method = "POST";
    request.ContentType = "application/json";
    request.ContentLength = requestData.Length;
    request.Headers.Add("x-api-key", serviceHostApiKey);
    request.Timeout = 3600000; //1 hour timeout
    StreamWriter requestWriter = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII);
    requestWriter.Write(requestData);
    requestWriter.Close();            

    try
    {
        WebResponse webResponse = request.GetResponse();
        Stream webStream = webResponse.GetResponseStream();
        StreamReader responseReader = new StreamReader(webStream);
        string response = responseReader.ReadToEnd();
        Console.Out.WriteLine(response);
        responseReader.Close();
        Dts.TaskResult = (int)ScriptResults.Success;
    }
    catch (Exception e)
    {
        Console.Out.WriteLine("-----------------");
        Console.Out.WriteLine(e.Message);
        Dts.TaskResult = (int)ScriptResults.Failure;
    }
}

我已经明确设置了 1 小时的超时时间,但是在执行 1 分钟后它仍然失败并出现以下错误,但是我可以看到该服务一直在处理,直到其所有操作完成。这意味着,服务执行成功,但 SSIS 包抛出异常。

以用户身份执行:qasql_svc。----------------- 底层连接已关闭:接收时发生意外错误。适用于 64 位的 Microsoft (R) SQL Server 执行包实用程序版本 11.0.6020.0 版权所有 (C) Microsoft Corporation。版权所有。开始时间:上午 8:02:06 错误:2018-10-24 08:03:07.25 代码:0x00000006 来源:InvokeAPI 描述:脚本返回失败结果。结束错误 DTExec:包执行返回 DTSER_FAILURE (1)。开始时间:上午 8:02:06 结束时间:上午 8:03:07 经过时间:60.422 秒。包执行失败。步骤失败。

当我尝试通过 Postman 运行相同的 REST API 时,我可以毫无例外地看到成功状态,这让我相信 REST API 或其配置没有问题。但是在 SSIS 包或其配置级别缺少或需要更正某些内容。

有人可以在这里建议吗?

谢谢

4

0 回答 0