BenYeomans
BenYeomans

Reputation: 383

Where do I put the dlls for edge.js to access

I have been using edge.js to call a C# function from within my Node.js app, however when I go to execute the C# code I get for example:

Metadata file 'System.Collections.Generic.dll' could not be found

Metadata file 'System.Text.dll' could not be found

...

My code is this below, basically wanting to run a SSIS package using a stored procedure which I am calling from C#. Basically all my referenced dll's can't be found? Where should I put the dlls for edge to find them?

var executeSQL = edge.func(function() {
  /*
  #r "System.Data.dll"
  #r "System.Collections.Generic.dll"
  #r "System.Linq.dll"
  #r "System.Text.dll"

  using System.Linq;
  using System.Text;
  using System.Data;
  using System.Collections.Generic;
  using System.Threading.Tasks;
  
  public class StartUp
  {

    public async Task<object> Invoke(object input)
    {
        string result = string.Empty;
        string packagePath = @"\SSISDB\test\package.dtsx";
        string spName = "storedProcName";

       

        using (var conn = new System.Data.SqlClient.SqlConnection("connectionString"))
        using (var command = new System.Data.SqlClient.SqlCommand(spName, conn)
        {
            CommandType = System.Data.CommandType.StoredProcedure
        })
        {
            conn.Open();
            command.Parameters.AddWithValue("@PackagePath", packagePath);
            command.ExecuteNonQuery();
            Console.WriteLine("Finished");
        };

        return null;
    }
  }
  */
});

I know I can do this without C# and just use a module within node like mssql to execute the stored procedure but this was just an example test to get used to using edge.js

Upvotes: 2

Views: 3197

Answers (1)

BenYeomans
BenYeomans

Reputation: 383

The comment from stuartd was correct in the sense to put the dlls under the same directory as the script (which I had tried) but I was still having the same issue. I solved my problem by having my C# code as a separate file and then referenced that file as below as part of the executeSSIS function. payload is just the object that gets passed from my node.js script to my C# script. Doing it this way solved my issue.

var payload = {
        filePath: 'C:/temp/xlsx/' + req.file.filename,
        path: req.packageName,
        server: req.server 
    };

var executeSSIS = edge.func({
        source: __dirname + '/cs/Program.cs',
        references: [
        __dirname + '/cs/System.Data.dll'
        ]
    });

executeSSIS(payload);

Upvotes: 1

Related Questions