我创建了一个 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 包或其配置级别缺少或需要更正某些内容。
有人可以在这里建议吗?
谢谢