We have deployed several changes to SSIS packages successfully, but this particular change gives us an error of
The component metedata is out of sync with the compiled script. Recompile the script using the Script Component Editor.
It runs fine in the debugger on my jump host. What do I do to "recompile the script"? Or is there a deeper problem?
UPDATE 1: This particular script component is more like a destination, and asynchronous. It accepts input rows, and all (or most) of them are consumed within the script (it updates external data via a Web Service), and only the error cases continue through to the output.
I have narrowed down the problem to the absolute minimum change that gives this error: adding another input column (or remove an unused input column). To be precise, after opening the package in Visual Studio 2012 on my jump host, double-click the Perform ETL task to open the Data Flow, then double-click the G9 Web Service Script Component.
I switch to Input Columns - there are 16 ticked/listed - and I untick one that is actually not used in the script. Or I tick (add) another column (which I want to use in the script).
Then I swap back to Script, click on Edit Script, and wait for the VstaProjects window to come up.
I either close this VstaProjects window straight away, or I make an extremely minor change to the script (comment only), then Build > Build ScriptComponent_5aa...acb, then press the floppy (Save) symbol, then exit Vsta.
Then I run in the debugger (press green start arrow) and it runs as expected. I build by right-clicking the project (G9) and selecting Build (this might be redundant after running in debugger).
In Windows (File) Explorer, I navigate to the G9/bin/Development
folder, double-click G9.ispac
(steps through deploy: Project Development file; my-dev-svr; SSISDB > ACME-SSIS (which gives SSISDB/ACME-SSIS/G9
); Deploy!
Problem: When I log into my-dev-svr, drill into Integration Services Catalogs, and run the package, then drill into the Overview Report (for this execution) > View Messages, I see several errors. The most important are
- Perform ETL:Error: "G9 Web Service Script Component" failed validation and returned validation status "VS_ISBROKEN".
- Perform ETL:Error: The component metedata is out of sync with the compiled script. Recompile the script using the Script Component Editor.
I'm not entirely convinced this is related, but here it is: I've copied G9.ispac
to my-dev-svr, then logged in there and on the command-line, executed dtexec. Bear in mind that this is the same server where SSIS debugging does not work.
D:\ACME\Deploy\SSIS>dtexec /Project G9.ispac /Package ACMEPortal_ProjectProperties_G9.dtsx
Microsoft (R) SQL Server Execute Package Utility
Version 11.0.6020.0 for 64-bit
Copyright (C) Microsoft Corporation. All rights reserved.
Started: 10:51:21 PM
Warning: 2017-04-17 22:51:21.74
Code: 0xC0016016
Source: SSIS:Property
Description: Failed to decrypt an encrypted XML node. Verify that the project was created by the same user. Project load will attempt to continue without the encrypted information.
End Warning
Warning: 2017-04-17 22:51:21.74
Code: 0x800190FF
Source:
Description: Failed to decrypt sensitive data in project with a user key. You may not be the user who encrypted this project, or you are not using the same machine that was used to save the project. If the sensitive data is a parameter value, the value may be required to run the package on the Integration Services server.
End Warning
Progress: 2017-04-17 22:51:25.61
Source: Get ETL Configuration
Executing query "etl_GetGenericETLConfigForACME".: 100% complete
End Progress
Progress: 2017-04-17 22:51:25.64
Source: Get G9 Web Service Connection Config Details
Executing query "etl_GetG9WSConfigSettings".: 100% complete
End Progress
Progress: 2017-04-17 22:51:25.65
Source: Audit ETL Initiation
Executing query "dbo.etl_AuditInitiation".: 100% complete
End Progress
Warning: 2017-04-17 22:51:25.68
Code: 0x80019002
Source: OnError
Description: SSIS Warning Code DTS_W_MAXIMUMERRORCOUNTREACHED. The Execution method succeeded, but the number of errors raised (6) reached the maximum allowed (1); resulting in failure. This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the errors.
End Warning
Error: 2017-04-17 22:51:25.68
Code: 0xC0010026
Source: Set Propogate Error to False
Description: The task has failed to load. The contact information for this task is "".
End Error
Error: 2017-04-17 22:51:25.71
Code: 0xC0024107
Source: Set Propogate Error to False
Description: There were errors during task validation.
End Error
Error: 2017-04-17 22:51:25.71
Code: 0xC0010026
Source: Set FilenamePart and Error Variables
Description: The task has failed to load. The contact information for this task is "".
End Error
Warning: 2017-04-17 22:51:25.72
Code: 0x80019002
Source: OnError
Description: SSIS Warning Code DTS_W_MAXIMUMERRORCOUNTREACHED. The Execution method succeeded, but the number of errors raised (10) reached the maximum allowed (1); resulting in failure. This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the errors.
End Warning
Error: 2017-04-17 22:51:25.72
Code: 0xC0010026
Source: Set Propogate Error to False
Description: The task has failed to load. The contact information for this task is "".
End Error
Error: 2017-04-17 22:51:25.73
Code: 0xC0024107
Source: Set Propogate Error to False
Description: There were errors during task validation.
End Error
Error: 2017-04-17 22:51:25.73
Code: 0xC0024107
Source: Set FilenamePart and Error Variables
Description: There were errors during task validation.
End Error
Warning: 2017-04-17 22:51:25.74
Code: 0x80019002
Source: ACMEPortal_ProjectProperties_G9
Description: SSIS Warning Code DTS_W_MAXIMUMERRORCOUNTREACHED. The Execution method succeeded, but the number of errors raised (8) reached the maximum allowed (1); resulting in failure. This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the errors.
End Warning
DTExec: The package execution returned DTSER_FAILURE (1).
Started: 10:51:21 PM
Finished: 10:51:25 PM
Elapsed: 4.344 seconds
UPDATE 2: An excerpt from the Script Component.
' Microsoft SQL Server Integration Services user script component
' This is your new script component in Microsoft Visual Basic .NET
' ScriptMain is the entrypoint class for script components
Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports ScriptComponentTaskUtility.ACME_ETLDataFlowScriptComponentTasks '-- custom toolkit
Imports ScriptComponentTaskUtility
Imports Microsoft.SqlServer.Dts
Imports System.Windows.Forms
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
Inherits UserComponent
Private _updateLimit As Integer
Private _rowCount As Integer
Public Overrides Sub PreExecute()
MyBase.PreExecute()
'
' Our application code follows
_updateLimit = 2 '-- Intending to replace this hard-coding
_rowCount = 0
End Sub
Public Overrides Sub G9ProjectInput_ProcessInputRow(ByVal Row As G9ProjectInputBuffer)
Try
' We limit the updated records to X per run (X = 2, but want to make configurable).
' Next ETL run will pick up next X
_rowCount += 1
If (_updateLimit > 0 And _rowCount > _updateLimit) Then Exit Sub
Dim taskComponent As G9Project = New G9Project(Me.UserID, Me.Password, Me.Config, Me.WSURL)
Dim readResponse As Project_DoReadResponse
''MessageBox.Show(Me.WSURL)
readResponse = taskComponent.ReadProject(Row.g9ProjectNumber, Row.Planet)
If (readResponse.Errors.Items.Length > 0) Then
CreateErrorRows(Row, readResponse.Errors.Items(0).ShortDescription)
Exit Sub
End If
Dim g9Project As Project = readResponse.Project
'**********************************
'Change the property values here
Try
' Who's in charge? The Manager or Owner?
If Not (Row.acmeInChargeCode_IsNull) Then
g9Project.SelectionCodes(10).Value = Row.acmeInChargeCode.ToString
End If
' ... other fields
Catch ex As Exception
Row.ErrorColumnName = "Web Service Error"
CreateErrorRows(Row, ex.Message)
Exit Sub
End Try
'End of change of property values
'**********************************
Dim updateResponse As ResponseBase
updateResponse = taskComponent.UpdateProject(g9Project)
If (updateResponse.Errors.Items.Length > 0) Then
CreateErrorRows(Row, updateResponse.Errors.Items(0).ShortDescription)
Exit Sub
End If
Catch ex As Exception
CreateErrorRows(Row, ex.Message)
Exit Sub
End Try
End Sub
' #Region ************************ NOTE: Copy & paste following code block *********************
' contains private member variables, etc, including CreateErrorRows()
End Class
Since you have already work out the script and make sure the script works fine. Then it has a lot chance it has issues in your destination
. It seems that you are using the Script component
as data source, try to check the Metadata
from the output of the source (right click the precedence constraint), check them whether they are matched with the input of destination, more important, if you have made any changes to the source columns, you'd better to delete and create a new destination, sometimes it might cache the columns that no longer exists.