2016-09-29 39 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客户端已列入白名单,因此相同的代码只是按预期工作。 –