Поведение службы не применяется правильно - PullRequest
0 голосов
/ 15 апреля 2010

У меня есть пользовательское поведение для службы, где я хочу указать значение тайм-аута при получении, я создал поведение и в заголовке службы сборки.

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

То же самое поведение при явном применении через работает. Есть идеи?

Поведение:

[AttributeUsage(AttributeTargets.Class)]
public class BuildServiceBindingBehavior : Attribute, IServiceBehavior
{
    public BuildServiceBindingBehavior( string p_receiveTime )
    {
        ReceiveTimeout = TimeSpan.Parse( p_receiveTime );
    }

    #region IServiceBehavior Members

    public void AddBindingParameters( ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, System.Collections.ObjectModel.Collection<ServiceEndpoint> endpoints, System.ServiceModel.Channels.BindingParameterCollection bindingParameters )
    {
    }

    public void ApplyDispatchBehavior( ServiceDescription serviceDescription, ServiceHostBase serviceHostBase )
    {
        // add this behavior to each endpoint
        foreach ( var endPoint in serviceDescription.Endpoints )
        {
            endPoint.Binding.ReceiveTimeout = ReceiveTimeout;
        }
    }

    public void Validate( ServiceDescription serviceDescription, ServiceHostBase serviceHostBase )
    {
    }

    #endregion

    internal TimeSpan ReceiveTimeout { get; set; }
}

Сервисный код:

[ServiceBehavior(Name = "DotNetBuildsService",
                 InstanceContextMode = InstanceContextMode.PerSession,
                 ConcurrencyMode = ConcurrencyMode.Single
                 )]
// Set receieve time out
[BuildServiceBindingBehavior( "0:0:1" )]
public class BuildService : IBuildTasksService
{
  //implementation code
}

Ответы [ 2 ]

0 голосов
/ 16 апреля 2010

Переместите код в ApplyDispatchBehavior () в AddBindingParameters ().

0 голосов
/ 16 апреля 2010

Проблема в том, что ваше поведение работает слишком поздно. К этому моменту свойства привязки уже были применены к слушателю канала, поэтому изменение привязки там не будет иметь никакого эффекта.

Я не думаю, что вы можете (или, по крайней мере, не помню, где бы вы ни могли) динамически изменять тайм-аут приема, как это, так как большинство слушателей канала в этом отношении закрыты (то есть вы не можете изменить их настройки после их открытия).

Зачем вам нужно изменить значение ReceiveTimeout следующим образом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...