我在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" />
我已经看到了同样问题的其他问题,但所有问题都是因为数据库或服务器不可用。我没有问题连接到服务器,因为我可以毫无问题地查询我的数据库。
当我尝试在我的数据库中写入时出现错误,因为我点击了lightswitch屏幕的保存按钮,或者因为我是通过服务器中的代码来执行此操作:
serverContext.DataWorkspace.My_Data.SaveChanges();
如果我评论上一行,则不会提示错误。
我还检查了数据库中的用户权限,这个usser是db_owner,所以应该没有问题。
任何人都遇到过这样的问题吗?
答案 0 :(得分:1)
我找到了解决方案!
经过深入研究后,我发现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" />
现在,一切正常。我希望这可以帮助那些面临同样问题的人,我真的很想知道为什么会这样,所以如果有人知道,请告诉我:)