我有一个带有sql数据库和asp.net 5 web应用程序的Azure试用帐户.数据库服务器防火墙具有本地计算机IP的规则,以及"允许访问Azure服务"复选框.我可以从本地的Sql Server Manager连接到azure数据库而不会发生任何事故.
Web应用程序在其"应用程序设置/连接字符串"部分中设置了此连接字符串.我已经使用此连接字符串检查了wep应用程序IS:
"Server = tcp:[MyServerName] .database.windows.net,1433; Database = [MyDbName]; User ID = [MyUserName] @ [MyServerName]; Password = [MyPassword]; Encrypt = True; TrustServerCertificate = False; Connection Timeout = 30;"
在桌面客户端中使用相同的连接字符串并且工作正常.但是,Web应用程序无法连接到服务器,并抛出此异常,这很明显,但我不知道如何解决.
建立与SQL Server的连接时发生与网络相关或特定于实例的错误.服务器未找到或无法访问.验证实例名称是否正确,以及SQL Server是否配置为允许远程连接.(提供者:命名管道提供程序,错误:40 - 无法打开与SQL Server的连接)
我知道在这里已经提出并回答了非常相似的问题,但是这些问题都不是我面临的完全相同的问题,也不是我的解决方案.
谢谢大家的时间.
更新1
作为测试,我已经将网站配置为在我的本地IIS上运行,对着天蓝色的数据库,它也有效.因此,桌面应用程序,SQL Server管理器和IIS可以从我的本地计算机访问此数据库.当然,我的IP在服务器防火墙中列入白名单,但是azure app服务也列入白名单,但没有访问权限.
更新2
Joe Raio的评论让我仔细检查了区域配置,这里是当前设置的屏幕截图.我相信一切都是正确的.
我们使用数据优先的方法,并使用 Scaffol-Dbcontext 对数据上下文进行逆向工程。
数据库是 MySQL,我们使用 Pomelo 作为提供者。
它在 283 数据库版本上一直工作正常,但现在命令崩溃并出现错误:
在操作完成之前命令超时已过期。
这是我使用的命令:
Scaffold-DbContext“服务器=本地主机;用户ID=用户;密码=通行证;端口=3306;数据库=db_name;sslmode=无;” "Pomelo.EntityFrameworkCore.MySql" -d -o "OutputFolder" -v -f -context "ContextName"
这是完整的堆栈跟踪:
MySql.Data.MySqlClient.MySqlException (0x80004005): The Command Timeout expired before the operation completed. ---> MySql.Data.MySqlClient.MySqlException (0x80004005): The Command Timeout expired before the operation completed.
at MySqlConnector.Protocol.Serialization.BufferedByteReader.ReadBytesAsync(IByteHandler byteHandler, ArraySegment`1 buffer, Int32 totalBytesToRead, IOBehavior ioBehavior) in C:\projects\mysqlconnector\src\MySqlConnector\Protocol\Serialization\BufferedByteReader.cs:line 36
at MySqlConnector.Protocol.Serialization.ProtocolUtility.ReadPacketAsync(BufferedByteReader bufferedByteReader, IByteHandler byteHandler, Func`1 getNextSequenceNumber, ProtocolErrorBehavior protocolErrorBehavior, IOBehavior ioBehavior) in C:\projects\mysqlconnector\src\MySqlConnector\Protocol\Serialization\ProtocolUtility.cs:line 406
at MySqlConnector.Protocol.Serialization.ProtocolUtility.DoReadPayloadAsync(BufferedByteReader bufferedByteReader, IByteHandler byteHandler, Func`1 getNextSequenceNumber, ArraySegmentHolder`1 previousPayloads, ProtocolErrorBehavior protocolErrorBehavior, …Run Code Online (Sandbox Code Playgroud)