在 iisnode 中,使 edge.js 从 web.config 拉取连接字符串
In iisnode, make edge.js pull connection string from web.config
我是 运行 iisnode 并使用 edge.js 访问第 3 方 DLL 中的代码。此代码需要有一个 web.config
文件,可从中提取连接字符串。
文件结构:
\noderoot\bin\my3rdParty.dll
\noderoot\cs\myCode.cs
\noderoot\api.js
\noderoot\server.js
\noderoot\web.config
cs\myCode.cs
using System;
using System.Threading.Tasks;
using My3rdPartyNamespace;
public class Startup {
public async Task<object> Invoke(dynamic input) {
// My3rdPartyObject.DoSomeStuff() looks at ConfigurationManager.ConnectionStrings
return My3rdPartyObject.DoSomeStuff((string)input.someThing);
}
}
api.js
import {Router} from 'express';
import Edge from 'edge';
import path from 'path';
let router = Router();
router.post('/doAThing', (req, res, next) => {
let aThing = Edge.func({
source: path.join(__dirname, 'cs/myCode.cs'),
references: [
'System.Web.dll',
'./bin/my3rdParty.dll'
]
});
let payload = {
someThing: req.body.someThing
};
let response = aThing(payload, true);
res.json(response);
});
export default router;
我试过将连接字符串放入 iisnode 使用的 web.config
文件中,但显然 edge.js 不在那里。当我将连接字符串放入 node.exe.config
并将该文件放入 c:\program files\nodejs
时,它会起作用,但这是一个不可接受的解决方案。
同样,我使用 edge.js 的全部意义在于我可以使用第三方 DLL,所以我不能简单地告诉 DLL 我的连接字符串是什么,除非我可以强行将它插入 ConfigurationManager.ConnectionStrings
.
我不能使用edge-sql因为我没有写任何SQL——dll已经处理了SQL.我 不能 使用环境变量 EDGE_SQL_CONNECTION_STRING
设置我的连接字符串,因为 dll 正在 web.config
.
中寻找一个特别命名的连接字符串
想法?
Edge.js 不知道使用 iisnode 在 IIS 中托管,因此不使用 web.config。 iisnode 充当 node.exe 的 HTTP 反向代理,运行 是应用程序一部分的 HTTP 侦听器。这个 node.exe 和其中的任何代码都作为一个独立的应用程序运行,否则您可以从命令行启动。因此,Edge.js 将只考虑与 node.exe 应用程序 (https://github.com/tjanczuk/edge#how-to-appconfig) 的 node.exe 可执行文件位于同一目录中的 node.exe.config 文件。
我假设将连接字符串放在 c:\program files\nodejs
中是不可接受的,因为它在机器上的多个应用程序之间共享,可能 运行 由不同的用户共享。
有办法解决它。您可以使用 nodeProcessCommandLine
配置 属性 (https://github.com/tjanczuk/iisnode/blob/master/src/samples/configuration/iisnode.yml#L13) 在自定义位置将 iisnode 配置为 运行 node.exe。具体来说,您可以将 node.exe 作为应用程序的一部分上传,指向 nodeProcessCommandLine
以使用该私有副本,然后将 node.exe.config
与您的连接字符串放在该私有 node.exe 旁边。
作为旁注,我建议将对 Edge.func
的调用放在全局范围内的上面的代码片段中,以便它 运行 只调用一次,而不是在每次 HTTP 调用时调用。
我是 运行 iisnode 并使用 edge.js 访问第 3 方 DLL 中的代码。此代码需要有一个 web.config
文件,可从中提取连接字符串。
文件结构:
\noderoot\bin\my3rdParty.dll
\noderoot\cs\myCode.cs
\noderoot\api.js
\noderoot\server.js
\noderoot\web.config
cs\myCode.cs
using System;
using System.Threading.Tasks;
using My3rdPartyNamespace;
public class Startup {
public async Task<object> Invoke(dynamic input) {
// My3rdPartyObject.DoSomeStuff() looks at ConfigurationManager.ConnectionStrings
return My3rdPartyObject.DoSomeStuff((string)input.someThing);
}
}
api.js
import {Router} from 'express';
import Edge from 'edge';
import path from 'path';
let router = Router();
router.post('/doAThing', (req, res, next) => {
let aThing = Edge.func({
source: path.join(__dirname, 'cs/myCode.cs'),
references: [
'System.Web.dll',
'./bin/my3rdParty.dll'
]
});
let payload = {
someThing: req.body.someThing
};
let response = aThing(payload, true);
res.json(response);
});
export default router;
我试过将连接字符串放入 iisnode 使用的 web.config
文件中,但显然 edge.js 不在那里。当我将连接字符串放入 node.exe.config
并将该文件放入 c:\program files\nodejs
时,它会起作用,但这是一个不可接受的解决方案。
同样,我使用 edge.js 的全部意义在于我可以使用第三方 DLL,所以我不能简单地告诉 DLL 我的连接字符串是什么,除非我可以强行将它插入 ConfigurationManager.ConnectionStrings
.
我不能使用edge-sql因为我没有写任何SQL——dll已经处理了SQL.我 不能 使用环境变量 EDGE_SQL_CONNECTION_STRING
设置我的连接字符串,因为 dll 正在 web.config
.
想法?
Edge.js 不知道使用 iisnode 在 IIS 中托管,因此不使用 web.config。 iisnode 充当 node.exe 的 HTTP 反向代理,运行 是应用程序一部分的 HTTP 侦听器。这个 node.exe 和其中的任何代码都作为一个独立的应用程序运行,否则您可以从命令行启动。因此,Edge.js 将只考虑与 node.exe 应用程序 (https://github.com/tjanczuk/edge#how-to-appconfig) 的 node.exe 可执行文件位于同一目录中的 node.exe.config 文件。
我假设将连接字符串放在 c:\program files\nodejs
中是不可接受的,因为它在机器上的多个应用程序之间共享,可能 运行 由不同的用户共享。
有办法解决它。您可以使用 nodeProcessCommandLine
配置 属性 (https://github.com/tjanczuk/iisnode/blob/master/src/samples/configuration/iisnode.yml#L13) 在自定义位置将 iisnode 配置为 运行 node.exe。具体来说,您可以将 node.exe 作为应用程序的一部分上传,指向 nodeProcessCommandLine
以使用该私有副本,然后将 node.exe.config
与您的连接字符串放在该私有 node.exe 旁边。
作为旁注,我建议将对 Edge.func
的调用放在全局范围内的上面的代码片段中,以便它 运行 只调用一次,而不是在每次 HTTP 调用时调用。