ASP.NET Windows IoT 上的 MVC raspberry pi 无法连接到 SQL 数据库

ASP.NET MVC on Windows IoT raspberry pi unable to connect to SQL database

我正在尝试在 Raspberry Pi 3 使用 Windows IoT 系统和 .NET Core 2.0.4 启动 MusicStore 应用程序。

我在 Raspberry 上使用 ubuntu 设法 运行 它,但在 Windows 中,我收到 screenshot 的错误(抱歉没有复制它,但我没有在 putty 中没有出现错误,所以我需要使用 Windows IoT 命令行,但我无法在任何地方复制此文本)。

两个系统都连接到我 PC 上的数据库,linux 能够 运行 应用程序,而 Windows 失败,所以这不是连接字符串的错误。 我以前遇到过丢失 sni.dll 的问题,但按照 this thread 中的建议,我通过复制 unix 修复了它。

有什么问题吗?

编辑: 今天我在我的旧电脑 (win10-x64) 上测试了它,我得到了与 Windows-IoT 相同的错误,所以我可以在这里复制它。

Unhandled Exception: System.AggregateException: One or more errors occurred. (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: SQL Network Interfaces, error: 44 - Could not compose Service Principal Name (SPN) for Windows Integrated Authentication. Possible causes are server(s) incorrectly specified to connection API calls, Domain Name System (DNS) lookup failure or memory shortage)) ---> 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: SQL Network Interfaces, error: 44 - Could not compose Service Principal Name (SPN) for Windows Integrated Authentication. Possible causes are server(s) incorrectly specified to connection API calls, Domain Name System (DNS) lookup failure or memory shortage) ---> System.Net.Sockets.SocketException: Nieznany host
    at System.Net.Dns.InternalGetHostByAddress(IPAddress address)
    at System.Net.Dns.GetHostEntry(String hostNameOrAddress)
    at System.Data.SqlClient.SNI.SNIProxy.GetSqlServerSPN(String hostNameOrAddress, String portOrInstanceName)
    at System.Data.SqlClient.SNI.SNIProxy.GetSqlServerSPN(DataSource dataSource)
    at System.Data.SqlClient.SNI.SNIProxy.CreateConnectionHandle(Object callbackObject, String fullServerName, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Byte[]& instanceName, Byte[]& spnBuffer, Boolean flushCache, Boolean async, Boolean parallel, Boolean isIntegratedSecurity)
--- End of inner exception stack trace ---
    at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, Boolean applyTransientFaultHandling)
    at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
    at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
    at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
    at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
    at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
    at System.Data.ProviderBase.DbConnectionPool.WaitForPendingOpen()
--- End of stack trace from previous location where exception was thrown ---
    at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenAsync(CancellationToken cancellationToken, Boolean errorsExpected)
    at Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerDatabaseCreator.<>c__DisplayClass20_0.<<ExistsAsync>b__0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
    at Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerDatabaseCreator.<>c__DisplayClass20_0.<<ExistsAsync>b__0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
    at Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerExecutionStrategy.ExecuteAsync[TState,TResult](TState state, Func`4 operation, Func`4 verifySucceeded, CancellationToken cancellationToken)
    at Microsoft.EntityFrameworkCore.Storage.RelationalDatabaseCreator.EnsureCreatedAsync(CancellationToken cancellationToken)
    at MusicStore.Models.SampleData.InitializeMusicStoreDatabaseAsync(IServiceProvider serviceProvider, Boolean createUsers) in C:\Users\lukas\Documents\projekty\magister\MusicStore\Models\SampleData.cs:line 27
--- End of inner exception stack trace ---
    at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
    at System.Threading.Tasks.Task.Wait()
    at MusicStore.Startup.Configure(IApplicationBuilder app) in C:\Users\lukas\Documents\projekty\magister\MusicStore\Startup.cs:line 220
    at MusicStore.Startup.ConfigureProduction(IApplicationBuilder app) in C:\Users\lukas\Documents\projekty\magister\MusicStore\Startup.cs:line 171
--- End of stack trace from previous location where exception was thrown ---
    at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder app)
    at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
    at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()
    at MusicStore.Program.Main(String[] args) in C:\Users\lukas\Documents\projekty\magister\MusicStore\Program.cs:line 67

据我所知,Windows IoT Core on arm 无法连接到 MS SQL Server.You 可以在 [ 上追踪问题(#9064) =16=]。 您可以使用其他 Web 服务或 wcf 并通过 REST-API 进行通信以解决问题。