2015-10-13 41 views
1

我想通过现有的命名管道请求一个GET。这是为了解决Azure上的Node进程被IISNode包装,因此没有自己的端口,而是被赋予命名管道(如PORT环境变量)的事实。节点的net.Server类知道如何处理命名管道,这就解释了HTTP路由工作正常的原因(因为http .Server似乎使用了same interface)。从文档:使用命名管道的节点HTTP请求

Class: net.Serverserver.listen(path[, callback])

在Windows中,本地域中使用命名管道来实现。 路径必须引用\?\ pipe \或\。\ pipe中的条目。任何字符 都是允许的,但后者可以对管道名称进行一些处理,例如解析..序列。尽管出现,管道名称 的空间是平坦的。管道不会持续存在,当最后一个关闭它们的引用 时它们将被删除。别忘了JavaScript字符串转义 要求使用双反斜线指定路径,例如:

但是这是在接收/侦听端。我想要做的就是重新使用这个现有的named-pipe来向监听服务器发送请求,绕过IISNode的外部复杂性。 这甚至可能吗?named-pipes包在这里似乎不适用,因为它似乎提供了一个太高级别的接口,它不像我想要的低级套接字/ EventEmitter性质)。有indications可能不可能,但似乎关心明确创建命名管道,不重复使用现有的,这是我想要做的。并不是说不会工作,只是它不是支持

我试着这样做来发送请求,但我没有得到响应。它只是挂着无所事事。

var namedPipeLocalDomain= app.config.port; 

var options = { 
    hostname: namedPipeLocalDomain, 
    path: util.format('/api/%s', restPayloadObject.servicepath), 
    method: 'GET' 
}; 

logger.info('Creating connection using named pipe, ', namedPipeLocalDomain); 

var req = http.request(options, function(res) { 
    logger.info('STATUS: ' + res.statusCode); 
    logger.info('HEADERS: ' + JSON.stringify(res.headers)); 

    res.setEncoding('utf8'); 
    res.on('data', function (chunk) { 
     body += data 
     logger.info('BODY: ' + chunk); 
    }); 
    res.on('end', function() { 
     console.log('No more data in response.') 
     console.log(body); 
    }) 
}); 

一些.NET家伙我谈过了的印象,这是行不通的,因为他们认为(未明确信息)命名管道只接受一个客户端的读/写管道。

相关:Calling localhost urls on Azure's IISNode

回答

0

你可以尝试使用,而不是app.config.port process.env.PORT,看看它是否工作。如果没有,唯一的选择是使用Azure虚拟机。