0

我在 Visual Studio 中开发的 dtsx 包中有一个 Web 服务任务。它有一个超时设置为 30 秒的 httpconnection。该软件包作为一个步骤包含在 sql server (2008 r2) 代理作业中。部署包时,我将其设置为存储在 SQL Server 中。

我希望能够仅更改 sql 作业步骤中的 Timeout 设置,但我不确定如何执行此操作,或者即使有可能。目前我正在更改 VS 中的设置,然后每次都重新部署包。

任何人都可以帮助我如何做到这一点?这应该设置在作业步骤的哪个选项卡上?

4

3 回答 3

1

需要注意的一件事是,HTTP 连接管理器上有 timeout 属性,但它用于控制与 Web 服务的实际连接。如果有意义的话,它不控制调用特定方法的实际时间。

我有一个 2005 年的软件包,它使用了一个用于清理地址的 Web 服务。该网络服务在内部托管,因此 HTTP 连接与 LAN 速度一样,没有问题。该服务本身可以很快标准化一个地址。当我需要批量清理几十万时,这需要相当多的时间。从 2008 R2 开始,XML 任务有一个内置的不可更改的默认超时,即 6 分钟。如果您需要它是 3601 秒或永不超时,这不是那么方便。我在查找文档时遇到了麻烦,但您可以通过启动一个休眠 6 分钟以上的服务来验证行为。

我们的解决方案是使用脚本任务来处理实际的服务调用,以便我们可以覆盖Timeout服务调用的属性。

Public Sub Main()
    Dim url As String
    Dim inboundFile As String
    Dim success As Boolean
    Dim timeoutMs As Integer
    ' 1 hour = 60min * 60 sec * 1000 milliseconds
    timeoutMs = 60 * 60 * 1000

    inboundFile = CStr(Dts.Variables("NetworkShareInput").Value)
    url = CStr(Dts.Variables("WebService").Value)

    Try
        Dim svc As New AddressCleanerService(url)
        ' Explicitly provide a timeout for the web service connection
        svc.Timeout = timeoutMs
        svc.Credentials = System.Net.CredentialCache.DefaultCredentials
        success = svc.CleanBulkAddresses(inboundFile)
    Catch ex As Exception
        Dts.Events.FireError(0, "Address cleaning", "Something failed in the address component stuff", String.Empty, 0)
        Dts.Events.FireError(0, "Address cleaning", ex.ToString(), String.Empty, 0)
    End Try

    If (success) Then
        Dts.TaskResult = ScriptResults.Success
    Else
        Dts.TaskResult = ScriptResults.Failure
    End If
End Sub
于 2013-02-07T15:35:49.870 回答
0

一种方法是使用表达式并从 sql 代理作业传递超时值。以下是高级步骤:

在 SSIS 包中创建一个变量来保存超时值。在 HTTP 连接的属性窗口中,单击表达式 eclipse 按钮​​。在属性表达式编辑器中展开属性下拉列表。选择超时。并使用您之前创建的超时变量。类似于:@[User::Timeout]

在 SQL Agent 中,使用命令行作为作业类型,并使用 DTEXEC 执行 SSIS 包。

在 DTEXEC 命令中,您可以将值传递给变量。下面是一个逗号示例: dtexec /f C:\SSIS\Package.dtsx /set \package.variables[Timeout].Value;45

因此,当您想要更改超时值时,只需在 SQL 代理作业中更改它,而不是重新部署包。

于 2013-02-07T15:05:07.780 回答
0

首先,如果您仍然可以控制源代码,我会向您指出包配置。然后您可以在 XML 文件或数据表中编辑这些设置。

假设您不这样做,您可以使用作业步骤的“设置值”选项卡将一些值推送到包中。困难的部分是让属性路径正确。同样,使用 Visual Studio 和包配置功能,您应该能够找到正确的名称。

试试这个属性路径:\Package.Connections[myHttpConnection].Properties[Timeout].Value

于 2013-02-07T15:14:22.257 回答