繁体   English   中英

在iisnode中,使edge.js从web.config中拉出连接字符串

[英]In iisnode, make edge.js pull connection string from web.config

我正在运行iisnode并使用edge.js来访问第三方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 ,它可以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反向代理,该node.exe运行作为应用程序一部分的HTTP侦听器。 该node.exe和其中的任何代码都可以充当独立的应用程序,否则可以从命令行启动。 因此,Edge.js将只考虑与运行该应用程序的node.exe可执行文件位于同一目录中的node.exe.config文件( https://github.com/tjanczuk/edge#how-to-appconfig ) 。

我认为将连接字符串放在c:\\program files\\nodejs是不可接受的,因为它在计算机上的多个应用程序之间共享,并且可能由不同的用户运行。

有一种解决方法。 您可以使用nodeProcessCommandLine配置属性( https://github.com/tjanczuk/iisnode/blob/master/src/samples/configuration/iisnode.yml#L13 )将nodeProcessCommandLine配置为在自定义位置运行node.exe。 具体而言,您可以将node.exe作为应用程序的一部分上载,指向nodeProcessCommandLine以使用该私有副本,然后将node.exe.config和连接字符串放置在该私有node.exe旁边。

作为附带说明,我建议Edge.func的调用放置在全局范围内的上述代码片段中,以使其仅运行一次,而不是在每个HTTP调用上运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM