Edge.js 从 expandoobject 转换为字符串
Edge.js cast to string from expandoobject
我正在尝试使用 Tomasz Janczuk 出色的 edgejs 库从第 3 方 dll 调用函数。根据我收到的错误消息,代码可能是也可能不是 returning 信息。我得到的错误消息(见下文)说代码需要一个字符串,但取回了一个 ExpandoObject。我已经根据 edgejs github 页面上的示例尝试了此代码的几个不同版本,但所有版本 return 都出现了相同的错误。该错误表明这只是将 expandoobject 转换为字符串的问题,但到目前为止我没有成功。对此问题的任何帮助将不胜感激。我一直在努力让它工作的时间比我承认的要长。
基于 edgejs 110_clr_instance.js 示例的代码 github:
var edge = require('edge');
var createSerial = edge.func({
source: {/*
using System;
using System.Threading.Tasks;
public class Startup
{
public async Task<object> Invoke(string location)
{
var serial = new Serial(location);
return new {
validateLocation = (Func<object,Task<object>>)(
async (location) =>
{
serial.ValidateLocation((string)location);
return serial.IsValid;
}
)
};
}
}
public class Serial
{
public static Connection conn = new Connection("https://companyname.moraware.net/companyname/api.aspx", "username", "password");
public bool IsValid { get; private set; }
public Serial(bool isValid)
{
this.IsValid = isValid;
}
public void ValidateLocation(string location)
{
conn.AutoRefreshOnTimeout = true;
if (!conn.Connected) { conn.Connect(); }
this.IsValid = conn.GetInventoryLocations().Any(x => x.InventoryLocationName == location);
if (conn.Connected) { conn.Disconnect(); }
}
} */},
references: ['JobTrackerAPI4.dll','Newtonsoft.Json.dll']
});
var serial = createSerial("A01-01", true);
console.log(serial.validateLocation(null, true));
控制台错误输出:
C:\Users\csnow\NodeApps\MarshallDataEdge\node_modules\edge\lib\edge.js:161
return edge.initializeClrFunc(options);
^
Error: Unable to cast object of type 'System.Dynamic.ExpandoObject' to type 'System.String'.
at Error (native)
at Object.exports.func (C:\Users\csnow\NodeApps\MarshallDataEdge\node_modules\edge\lib\edge.js:161:17)
at Object.<anonymous> (C:\Users\csnow\NodeApps\MarshallDataEdge\Evolveware_clr_instance.js:5:25)
at Module._compile (module.js:413:34)
at Object.Module._extensions..js (module.js:422:10)
at Module.load (module.js:357:32)
at Function.Module._load (module.js:314:12)
at Function.Module.runMain (module.js:447:10)
at startup (node.js:146:18)
at node.js:404:3
Process finished with exit code 1
但是后来我使用 webstorm 单步执行代码并从 edge.js 中发现了这个错误。 ReferenceError: options is not defined
edgejs_clr_instance_error
您将 C# 文字传递给 edge.func 的方式缺少 function () {...}
包装器。应该是:
edge.func({
source: function () {/*
// C# code goes here
*/},
...
});
而不是
edge.func({
source: {/*
// C# code goes here
*/},
...
});
我正在尝试使用 Tomasz Janczuk 出色的 edgejs 库从第 3 方 dll 调用函数。根据我收到的错误消息,代码可能是也可能不是 returning 信息。我得到的错误消息(见下文)说代码需要一个字符串,但取回了一个 ExpandoObject。我已经根据 edgejs github 页面上的示例尝试了此代码的几个不同版本,但所有版本 return 都出现了相同的错误。该错误表明这只是将 expandoobject 转换为字符串的问题,但到目前为止我没有成功。对此问题的任何帮助将不胜感激。我一直在努力让它工作的时间比我承认的要长。
基于 edgejs 110_clr_instance.js 示例的代码 github:
var edge = require('edge');
var createSerial = edge.func({
source: {/*
using System;
using System.Threading.Tasks;
public class Startup
{
public async Task<object> Invoke(string location)
{
var serial = new Serial(location);
return new {
validateLocation = (Func<object,Task<object>>)(
async (location) =>
{
serial.ValidateLocation((string)location);
return serial.IsValid;
}
)
};
}
}
public class Serial
{
public static Connection conn = new Connection("https://companyname.moraware.net/companyname/api.aspx", "username", "password");
public bool IsValid { get; private set; }
public Serial(bool isValid)
{
this.IsValid = isValid;
}
public void ValidateLocation(string location)
{
conn.AutoRefreshOnTimeout = true;
if (!conn.Connected) { conn.Connect(); }
this.IsValid = conn.GetInventoryLocations().Any(x => x.InventoryLocationName == location);
if (conn.Connected) { conn.Disconnect(); }
}
} */},
references: ['JobTrackerAPI4.dll','Newtonsoft.Json.dll']
});
var serial = createSerial("A01-01", true);
console.log(serial.validateLocation(null, true));
控制台错误输出:
C:\Users\csnow\NodeApps\MarshallDataEdge\node_modules\edge\lib\edge.js:161
return edge.initializeClrFunc(options);
^
Error: Unable to cast object of type 'System.Dynamic.ExpandoObject' to type 'System.String'.
at Error (native)
at Object.exports.func (C:\Users\csnow\NodeApps\MarshallDataEdge\node_modules\edge\lib\edge.js:161:17)
at Object.<anonymous> (C:\Users\csnow\NodeApps\MarshallDataEdge\Evolveware_clr_instance.js:5:25)
at Module._compile (module.js:413:34)
at Object.Module._extensions..js (module.js:422:10)
at Module.load (module.js:357:32)
at Function.Module._load (module.js:314:12)
at Function.Module.runMain (module.js:447:10)
at startup (node.js:146:18)
at node.js:404:3
Process finished with exit code 1
但是后来我使用 webstorm 单步执行代码并从 edge.js 中发现了这个错误。 ReferenceError: options is not defined
edgejs_clr_instance_error
您将 C# 文字传递给 edge.func 的方式缺少 function () {...}
包装器。应该是:
edge.func({
source: function () {/*
// C# code goes here
*/},
...
});
而不是
edge.func({
source: {/*
// C# code goes here
*/},
...
});