2011-02-07 40 views
10

MVC3、.NET Framework 4.0およびEntity Frameworkを使用してASP.NET Webサイトを開発しています。アプリケーションを実行し、SQL Server 2005データベースを単純に選択すると、次のエラーが発生します。.NET 4.0 Entity Frameworkのタイムアウトが終了しました

"A System.Data.SqlClient.SqlExceptionがスローされました:"タイムアウトが切れています。操作が完了する前にタイムアウト時間が経過しているか、サーバーが応答していません」。

これは問題です。管理スタジオからログインして同じクエリを実行しようとしましたが、 .NETフレームワーク4.0とエンティティフレームワークはまったく同じクエリを実行し、必要な情報を返しました。私はEntityフレームワークを使用してADO.NETクラス(SqlConnectionとSqlCommand)に切り替え、SqlCommandインスタンスからselectを実行すると、同じエラーです

エンティティフレームワークを使用してモデルを作成したとき、ウィザードからデータベースに接続でき、うまくいきました。すべてのクラスを問題なく作成できました。

解決策は、クエリが実際には小さい(20レコードトップ)ため、タイムアウトを増やすことではないと言っています。同じ技術を使用して同じアプリケーションを使用しても、コード私は下に置きます。

この

は私に問題を与えてコードです:searchResults.ToListを実行しているときに例外がスローされ

MLIBEntities dbMLIB = new MLIBEntities(); 

var searchResults = (from s in dbMLIB.Sets 
        where s.setmap1.StartsWith(accountNumber) 
        select s); 

return searchResults.ToList(); 

();

これはエンティティクラスで使用されている接続文字列です。私は、構文エラーでそれを修正したので、接続文字列を使用していると確信しています。

<connectionStrings> 
    <add name="MLIBEntities" connectionString="metadata=res://*/Models.MlibDBModel.csdl|res://*/Models.MlibDBModel.ssdl|res://*/Models.MlibDBModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=HERPADERP;Initial Catalog=MLIB;Integrated Security=True;MultipleActiveResultSets=True;Connect Timeout=200&quot;" providerName="System.Data.EntityClient" /> 
</connectionStrings> 

私は、これはどこかMVC Webアプリケーションでの設定の問題でなければなりません推測しているか、私は、Web.configファイルに何かが欠けています。あなたにこの問題があったのですか?私はそれが本当に奇妙であることを知っている。

ありがとうございました。私は本当にアイデアがありません。

最後の1つです。私は、SQLプロファイラを実行し、クエリはデータベースサーバーに決してしないようだ。なぜこれが起こっているのだろうか?

+0

実際に200秒後にタイムアウトしますか? – Will

+0

本当に、ASP.NET MVC 3との関係はありません。 –

+0

SQL Serverはローカルまたはネットワーク上にありますか? –

答えて

0

ありがとうございました。クエリが本当に大量のレコードを返していたようで、Webアプリケーションからコンソールアプリケーションを実行しているときに、その性質上、タイムアウトが発生していたようです。

もう一度ありがとうございます!

+0

コンソールアプリケーションは、ほぼ同じ時間に同じ量のレコードを取得します。どちらのアプリケーションがデータベースを照会しているのかは、データベースおよび/またはレコードです。 – jlafay

+0

あなたは正しいです、そこに何か魚がありました。私はクエリを最適化し、問題を修正しました。ありがとう。 – Alvos

2

これはタイムアウトとして表示される可能性がありますが、単なるセキュリティ上の問題です。

私の最初の本能は、Windows認証(統合セキュリティ= True)を使用して接続していて、そのサーバーの有効なログイン情報を持たないアカウント(ネットワークサービス?)でWebサイトが実行されていることです。

私の2番目の本質は、Sql Serverが別のマシンにあり、ファイアウォールに問題があることです。

第3の本質は、Sql ServerがTCPIP経由でネットワーク接続を受け入れるように設定されていないことです。 SQL Server Configuration Managerを実行し、リッスンしていることを確認します。

+1

しかし、彼はConsoleAppから接続することができたので、問題は他の場所になければなりません。 –

+1

@Tomas彼は彼のユーザーアカウントでコンソールアプリケーションから接続します。 ASP.NETは別のアカウントで実行されるため、間違っています。 – Will

+1

あなたはまったく正しいです。私はコメントを書いた後でそれを実現しました。ありがとう –

0

は、私はすでに接続文字列に真MultipleActiveResultSets =とタイムアウトを持っていた、それは私が同じ問題を抱えていたし、別の1もMSSQLに関連しない、後で登場問題

3

だかどうかを確認するために、それをオフにしてみてください。最初の問題(実行クエリが長すぎる)を解決するために、私はcommand.CommandTimeoutを変更してより大きな数値(デフォルトは30)を使用しました。私は、このアプリケーションを実行するようにスケジュールされたタスクを使用したときに現れたもう一つの問題は、た - 20分後には、ログのエラーを確認した後、エラー

"Thread was being aborted"

を投げだろう、それはアプリケーションプールも、それはタイムアウトのしている、とデフォルト値があることを出てきました20分。

+3

また、EFでは、プロバイダに依存しないようにするには、ObjectContext.CommandTimeoutを設定してタイムアウトを延長することができます。 http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.commandtimeout.aspx – jkelley

関連する問題