私はlightswitchでWebアプリケーションを開発しました。サーバー(C#)に接続するHTMLライトスイッチクライアントがあり、このサーバーはSQLデータベースからデータを取得します。
アプリケーションはローカルマシンで正しく機能しています。問題は、Azureのクラウドサービスにソリューションを公開するときに発生します。次に、サーバーはデータベースに正しく接続し、データベースからすべての情報を読み取ることができますが、アプリケーション内からデータベースを更新しようとすると(行の挿入または更新)、アプリケーションがフリーズし、次のエラーが発生します。
SQLServerデータベースに接続できません。内部例外メッセージ:SQLServerデータベースに接続できません。内部例外メッセージ:SQLServerへの接続の確立中にネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできませんでした。インスタンス名が正しいこと、およびSQLServerがリモート接続を許可するように構成されていることを確認してください。(プロバイダー: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();
前の行にコメントしても、エラーは表示されません。
データベースのユーザー権限も確認しましたが、このusserはdb_ownerなので、問題はないはずです。
誰もがこのような問題に直面したことがありますか?
私は解決策を見つけました!
深く調査した結果、Azureサーバーがアプリケーションに接続文字列を追加していることがわかりました(方法も理由もわかりません)。この接続文字列はどこかから継承され、SQLExpressのローカルインスタンスを指しています。明らかに、このインスタンスは存在しないため、タイムアウト後、アプリケーションは上記のエラーをスローします。
なぜこれが起こっているのか、データベースに書き込もうとしたときにのみ起こるのか、私にはよくわかりません。私が見つけた解決策は、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]
コメントを追加