2

次のもので構成される.NETプロジェクトがあります。

  1. WCFWebサービス
  2. EntityFrameworkデータレイヤー

以下で説明する最終的な問題は、Userテーブルにあります。スキーマのUserテーブルは次のとおりです。

CREATE TABLE [dbo].[User](
    [Id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
    [FirstName] [varchar](50) NOT NULL,
    [LastName] [varchar](50) NOT NULL,
    [Email] [varchar](50) NOT NULL,
    [Username] [varchar](50) NOT NULL,
    [Password] [varchar](250) NOT NULL,
    [AuthenticationKey] [uniqueidentifier] NULL,
    [Active] [bit] NOT NULL DEFAULT (1),
    [Admin] [bit] NOT NULL DEFAULT (0),
    [AutoSubmit] [bit] NOT NULL DEFAULT(0))

CREATE UNIQUE NONCLUSTERED INDEX [IX_User] ON [dbo].[User] 
(
        [Username] ASC
)

3つのレコードを含むUserテーブルに対してクエリを実行すると、1秒未満で実行されます。

User.Validate()というメソッドでEntityFrameworkに対して次のクエリを実行しています。

database.User.Where(user => user.Username == userName && user.Active).SingleOrDefault()

上記のコードは、単体テストから呼び出すときに正常に実行されます。ただし、WCF Webサービスからそのメソッドから呼び出すと、次の例外が発生します。

System.ServiceModel.FaultException:System.Web.Services.Protocols.SoapException:サーバーは要求を処理できませんでした。---> System.Data.EntityCommandExecutionException:コマンド定義の実行中にエラーが発生しました。詳細については、内部例外を参照してください。---> System.Data.SqlClient.SqlException:タイムアウトが期限切れになりました。操作が完了する前にタイムアウト期間が経過したか、サーバーが応答していません。---> System.ComponentModel.Win32Exception:待機操作がタイムアウトしました

Entity Frameworkのカバーの下で、以下のクエリは、クエリがタイムアウトしたときに実行されるものです。クエリを実行すると、1秒未満で実行されます。このタイムアウトの原因は何ですか?

exec sp_executesql N'SELECT TOP (2) 
[Extent1].[Id] AS [Id], 
[Extent1].[FirstName] AS [FirstName], 
[Extent1].[LastName] AS [LastName], 
[Extent1].[Email] AS [Email], 
[Extent1].[Username] AS [Username], 
[Extent1].[Password] AS [Password], 
[Extent1].[AuthenticationKey] AS [AuthenticationKey], 
[Extent1].[Active] AS [Active], 
[Extent1].[Admin] AS [Admin], 
[Extent1].[AutoSubmit] AS [AutoSubmit]
FROM [dbo].[User] AS [Extent1]
WHERE [Extent1].[Username] = @p__linq__0',N'@p__linq__0 varchar(8000)',@p__linq__0='test1'
4

0 に答える 0