2016-09-29 84 views
1

我試圖移植作爲SQL Server數據庫前端的Web API。 web api在Windows下工作正常,並且在部署到IIS時,可以從Windows上的.Net Core開始工作,但在從OSX或Linux中運行時會出現連接錯誤。在OS X上使用.Net代碼連接到SQL Server

從Windows中工作在Visual Studio中的連接字符串是

connectionString="data source=A\B;initial catalog=C; 
persist security info=True;user id=X; password=Y;  
MultipleActiveResultSets=True;App=EntityFramework" 
providerName="System.Data.SqlClient" 

,然後將其轉化爲連接字符串的.NET核心變異爲:

Server=A\B;Database=C;user id=X;password=Y; 

該項目編譯正常,甚至可以在Windows的.Net核心下運行,但是從* nix機器運行時會崩潰。

的錯誤是:

Unhandled Exception: System.Data.SqlClient.SqlException: 
A network-related or instance-specific error occurred while 
establishing a connection to SQL Server. The server was not found or 
was not accessible. Verify that the instance name is correct and that 
SQL Server is configured to allow remote connections. (provider: TCP 
Provider, error: 35 - An internal exception was caught) ---> 
System.AggregateException: One or more errors occurred. (No such device 
or address) ---> 
System.Net.Internals.SocketExceptionFactory+ExtendedSocketException: No 
such device or address 

我可以ping的地址,但我想有效的地址(A)和服務器實例(B)的組合不具有下* nix中一個簡單的斜線工作。

+0

你說的崩潰。究竟發生了什麼?您的Mac能否解析名稱A以指向正確的機器? – TZHX

+0

我用更好的描述更新了這個問題。在任何情況下,我的機器確實可以ping通A,所以錯誤可能是A \ B的組合,這應該以其他方式給出? –

+0

什麼*是*'A'? IP地址,FQDN,服務器名稱?你能用任何其他工具連接到服務器嗎?僅僅因爲你可以ping一個地址並不意味着你可以連接到一個命名實例。 –

回答

1

Server = A \ B; Database = C; user id = X; password = Y;

表示您在Netbios名稱爲A的Windows計算機上訪問B實例。可能其工作的Windows計算機本身就是「A」。

對於遠程連接,雖然也有,你應該做的事情:

  1. SQL Server實例應設置爲允許遠程連接。
  2. 必須啓用SQL服務器偵聽的端口才能在防火牆上訪問。
  3. 而不是Netbios名稱,如果不是默認端口(1433),最好使用IP地址以及端口號。

您可以開始嘗試(其中1.2.3.4是Windows機器的IP):

1.2.3.4\B;Database=C;uid=X;pwd=Y 

SQL Express的主機PC上的一個詳細的安裝和設置,從而實現遠程訪問,然後訪問遠程電腦,你可以觀看我的短片系列。這些視頻是關於我的應用程序的安裝,但其中大部分都包含安裝MS SQL服務器和從遠程位置訪問。這是一個4件系列,在這裏是鏈接到第一部分:

AccuSQL Installation 1/4

+0

問題在於Linux客戶端未被列入白名單,因此無法訪問SQL Server計算機,而Windows客戶端已列入白名單,因此相同的代碼只是按預期工作。 –