2016-12-29 1 views
0

Nodej를 기반으로하는 Azure 응용 프로그램 서비스에서 온 - 프레미스 SQL Server Express 데이터베이스를 쿼리해야합니다. 하이브리드 연결을 추가하려면 this tutorial을 따라갔습니다.azure 노드에서 하이브리드 연결을 통해 데이터베이스 쿼리 js 백엔드

내 서비스에이 연결을 성공적으로 연결하고 추가했습니다. 그런 다음

Server=LOCALHOST\\SQLEXPRESS,1433;Database=smartpointmovil_db;User ID=sa;Password=pass1009 

, 내 푸른 모바일 앱 서비스 노드 JS에서 쉬운 API를 썼다 : 나는 또한 연결 문자열을 추가

"get": function (req, res, next) { 
    var sql = require("mssql"); 

var config = { 
    server: 'LOCALHOST\\SQLEXPRESS', 
    user: 'sa', 
    password: 'pass1009',  
    database: 'smartpointmovil_db', 
    port: 1433 
}; 


var conn = new sql.Connection(config); 
var req=new sql.Request(conn); 

    conn.connect(function(err){ 
     if(err){ 
      console.log("Error connectig: "+err); 
      return; 
     } 


     req.query('select * from smartpointmovil.cat_cadenas where id=1',function(err,results){ 
        if(err){ 
          console.log("Error during query: "+err); 
          return; 
          } 
        else{ 
          console.log("Success: "+results[0].cadena); 
          res.json(results[0]); 
         } 
        conn.close(); 
     }); 

    }); 

} 

나는이 API를 호출 할 때마다, 나는 다음을 얻을 오류 메시지 :

Error connectig: ConnectionError: Failed to connect to LOCALHOST:undefined in 15000ms

내 코드에서 쿼리에 사용되는 연결 문자열을 정의 할 수있는 방법을 찾을 수 없었기 때문에이 구성 매개 변수를 포함하고있다.

Azure 호스트 서비스에서 내 로컬 데이터베이스를 쿼리하기 위해 노드 js 코드를 작성하는 방법에 대한 아이디어가 있습니까?

답변

0

, 이들은하게 내 코드에서 한 변화는 그것이 작동됩니다

  1. 는 'LOCALHOST에서 서버 이름 변경 '내 서버 호스트 이름 :'quandojhv '하이브리드 연결에서 호스트 이름과 같은 이름입니다.
  2. 서버 구성 매개 변수에서 '\ SQLEXPRESS'인스턴스 이름을 제거했습니다. 내 코드에서

새로운 구성 매개 변수는 다음과 같습니다

var config = { 
server: 'quandojhv', 
user: 'sa', 
password: 'pass1009',  
database: 'smartpointmovil_db', 
options: { 
    encrypt: true 
}}; 
0

하이브리드 연결을 정의 할 때 온 - 서버의 호스트 이름 (컴퓨터 이름)을 (컴퓨터 이름)으로 사용하십시오. 그런 다음 동일한 이름을 사용하여 App Service 코드에서 해당 컴퓨터를 참조하십시오.

Server=SQL-SRV-01\SQLEXPRESS,1433; [...] 

하이브리드 연결 getaddrinfo 시스템 콜을 후킹하여 작업, 그리고 응용 프로그램 서비스의 상단에 실행되는 VM의 실제 LOCALHOST (127.0.0.1)에서 LOCALHOST을 따로 따로 말할 아마없는입니다. Kudu Console에서 sqlcmd.exe

테스트 : 나는 그것을 작동있어

D:\home>sqlcmd -S tcp:SQL-SRV-01,1433 -U {username} -P {password} 
       -Q "SELECT NAME FROM sys.sysdatabases" 

NAME 
------------------- 
master 
MobileServiceZZZ_db 

(2 rows affected) 
+0

내가 이미 시도했다. 하이브리드 연결의 호스트 이름을 "LOCALHOST"에서 "quandojhv"(로컬 서버의 컴퓨터 이름)로 변경했습니다. 연결 문자열과 코드의 연결 구성이 "... server = 'quandojhv \\ SQLEXPRESS', ..."에 의해 변경되었습니다. 같은 오류가 발생합니다 : "응용 프로그램 : 오류 connectig : ConnectionError : quandojhv에 연결하지 못했습니다 : 15000ms에 정의되지 않았습니다." –

+0

둘 다 Kudu 콘솔에서 사용할 수있는 sqlcmd.exe 및 nameresolver.exe로 테스트하십시오. – evilSnobu

+0

아, HCM이 NIC의 개인 IP 주소에서 패킷을 가져 오므로 SQL 인스턴스가 127.0.0.1보다 광범위한 신호를 수신하는지 확인하십시오 (예 : 서버가 10.1.1.1 인 경우 흐름은 10.1.1.1:random_port -> 10.1.1.1:1433) – evilSnobu

관련 문제