2015-10-13 37 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虛擬機。