我在lightswitch中开发了一个Web应用程序。有一个HTML lightswitch客户端连接到服务器(C#),此服务器从SQL数据库获取数据。
该应用程序在本地计算机上正常运行,当我将解决方案发布到Azure中的Cloud Service时出现问题。然后,服务器正确连接到数据库并可以从中读取所有信息,但是当我尝试从应用程序内部(插入或更新行)更新数据库时,应用程序冻结,并提示以下错误:
无法连接到SQL Server数据库。内部异常消息:无法连接到SQL Server数据库。内部异常消息:建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称正确,并且已将SQL Server配置为允许远程连接。(提供者:SQL网络接口,错误:26-指定服务器/实例时出错)
我检查了连接参数,所有参数均正确,这是我的web.config中的连接字符串:
<add name="My_Data" connectionString="data source=tcp:{MyServer}.database.windows.net,1433;initial catalog={myDatabase};user id={Myuser}@{MyServer};password={MyPassword};Trusted_Connection=False;Encrypt=True;Connection Timeout=30;" providerName="System.Data.SqlClient" />
我看到了其他与同一问题有关的问题,但是所有这些问题都是因为数据库或服务器不可用。连接到服务器没有问题,因为我可以毫无问题地查询数据库。
当我尝试写入数据库时,由于我单击了电灯开关屏幕的“保存”按钮,或者因为我通过服务器中的代码执行此操作,因此出现错误:
serverContext.DataWorkspace.My_Data.SaveChanges();
如果我注释上一行,则不会提示错误。
我还检查了数据库中的用户权限,并且此使用程序是db_owner,因此应该没有问题。
有人遇到过这样的问题吗?
我找到了解决方案!
经过深入研究,我发现Azure服务器正在向我的应用程序添加连接字符串(我也不知道如何,为什么)。此连接字符串是从某个地方继承的,它指向SQL Express的本地实例。显然,该实例不存在,因此在超时后,应用程序将引发上面显示的错误。
我真的不知道为什么会发生这种情况,也不知道为什么只有在尝试写入数据库时才会发生。我发现的解决方案是在web.config的连接字符串部分中添加以下内容:
<clear />
这样,我们删除了继承的连接字符串。现在,我们必须设置LocalSqlServer的连接字符串(这将是我们的连接字符串,它指向Azure中的远程SQL Server的连接字符串):
<add name="LocalSqlServer" connectionString="Data Source={SERVER}.database.windows.net;Initial Catalog={DATABASE};Integrated Security=False;User ID={USER}@{SERVER};Password={PASSWORD};Encrypt=True" />
现在,一切正常。我希望这可以帮助与我面临同样问题的任何人,我真的很想知道为什么会这样,所以如果有人知道,请告诉我:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句