System.Data.Services.Client.DataServiceContext Свойство тайм-аута не работает - PullRequest
2 голосов
/ 04 августа 2020

У меня проблема, когда время ожидания запроса истекает до получения результатов. Я использую Entity Framework v. 6.0. Установка свойства context.Timeout, похоже, не оказывает никакого влияния.

Вот объявление класса и конструктор, чтобы вы знали, с чем я имею дело. Это сгенерированный код из Reference.cs:

    public partial class PSIDevEntities : global::System.Data.Services.Client.DataServiceContext
{
    /// <summary>
    /// Initialize a new PSIDevEntities object.
    /// </summary>
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
    public PSIDevEntities(global::System.Uri serviceRoot) : 
            base(serviceRoot, global::System.Data.Services.Common.DataServiceProtocolVersion.V3)
    {
        this.ResolveName = new global::System.Func<global::System.Type, string>(this.ResolveNameFromType);
        this.ResolveType = new global::System.Func<string, global::System.Type>(this.ResolveTypeFromName);
        this.OnContextCreated();
        this.Format.LoadServiceModel = GeneratedEdmModel.GetInstance;
    }

Я попытался установить для тайм-аута большое число. Однако время ожидания запроса истекает через 30 секунд.

var context = new PSIDevEntities(URI);
context.Timeout = 120000;
var result = from p in context.vwPacings
             where p.InactiveDateTime == null
             orderby p.ProgramTitle
             select p;
// timeout occurs here after 30 seconds
retList = result.ToList();

Где-то время ожидания по умолчанию составляет 30 секунд. Что мне нужно сделать, чтобы увеличить время ожидания для этого запроса?

1 Ответ

2 голосов
/ 07 августа 2020

Ответ - изменить автоматически сгенерированный код в службе данных. Ой! Но это работает. Чтобы изменить время ожидания команды для службы данных. Введите эти две строки в конструктор DbContext:

        var objectContext = (this as IObjectContextAdapter).ObjectContext;
        objectContext.CommandTimeout = 120;   // Or any required timeout

Итак, для моего исправления мой конструктор теперь выглядит так:

public partial class PSIDevEntities : DbContext
{
    public PSIDevEntities()
        : base("name=PSIDevEntities")
    {
        base.Configuration.ProxyCreationEnabled = false;
        var objectContext = (this as IObjectContextAdapter).ObjectContext;
        objectContext.CommandTimeout = 120;
    }
...
...