0

OK、私は困惑しています。EntityFrameworkを介してデータベースと通信するための.NETWinformsアプリを作成しようとしています。私は当初、最初に失敗した後にデータベースと通信できるASP.NET MVC3アプリ(個別のDALレイヤーを使用)を作成しました。したがって、最初に接続を開こうとすると、タイムアウトになります。次にブラウザでF5キーを押すと、正常に接続されます。WinformsアプリでこのDALを参照しました。

  • SQLManagementStudioのSQLAuthを介してデータベースに正常に接続できます。
  • VS2010でADO.NETデータクラスを作成できます(接続し、テーブルを取得し、接続文字列をapp.configに格納します)。
  • ただし、Winformsアプリを実行すると、接続できなくなります。「タイムアウトが期限切れになりました」というInnerExceptionで前述の例外が発生します。

接続文字列をweb.configからapp.configにコピーしました。

SQLデータベースは、SERVERというWindowsHomeServerでホストされています。私はワークグループに所属しています(ドメインなし)。ManagementStudioとVSでSERVER\SQLEXPRESSを使用して、正常に接続しています。

私が試したこと:

  • クライアントマシンのファイアウォールを無効にします。
  • サーバーでDTCを有効にし、サーバーの除外リストにmsdtc.exeを追加しました。
  • SQLサーバーインスタンスで名前付きパイプが有効になっていることを確認しました。
  • さまざまなSQLユーザーを試しました。
  • C#で接続を構築するさまざまな方法を試しました。
  • WinFormsプロジェクトにローカルな新しいADO.NETデータクラスを生成しました(DALを参照していません)。VSは正常に接続し、テーブルを読み取り、コードを生成します。ただし、実行中のアプリにより、「タイムアウトが期限切れ」のSqlExceptionが発生します。

そのため、アプリの実行は接続に失敗します。ProcessExplorerでアプリを見ると、SYN_SENTメッセージを使用してリモートポート4845に接続しようとすると、TCPウィンドウにエントリが表示されます。それが正しいかどうかわからない。

私は過去数日間これをグーグルで検索し、この例外について言及しているStackoverflowのすべての記事と返信を読みましたが、壁にぶつかりました。

これは、VSがDBを読み取った後に生成したConnectionStringです。

<add name="LLDBEntities" connectionString="metadata=res://*/LLDB.csdl|res://*/LLDB.ssdl|res://*/LLDB.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=SERVER\SQLEXPRESS;initial catalog=LLDB;persist security info=True;user id=sa;password=sapwd;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

何が起こっているのかを理解する方法についてのヒントでさえ、どんな助けにも感謝します。

4

2 に答える 2

1

接続文字列は、SQL Express ではなく、SQL Server への接続文字列のように見えます。

SQL Express への接続文字列については、こちらをご覧ください: SQL Server Express connection string for Entity Framework Code First

于 2012-04-04T22:30:55.720 に答える
1

わかりました、解決しました。

同じアプリと接続を使用して、2 回目の試行で実際に接続されることに気付きました。その時点で、次のリンクを見つけました: http://kromey.us/2011/06/microsoft-sql-server-2008-times-out-on-first-connection-attempt-447.html

そのため、インスタンスの TCP/IP プロパティの SQL Server 構成マネージャーの IPAll 動的ポートの下にリストされているファイアウォール ポートを開き、すべて正常に動作するようになりました。2回目の試行でなぜそれが成功するのかはまだわかりません....

于 2012-04-06T00:39:26.467 に答える