У меня есть пользовательское поведение для службы, где я хочу указать значение тайм-аута при получении, я создал поведение и в заголовке службы сборки.
Я использую декларативный атрибут, чтобы применить поведение или, как я думал. Но поведение, кажется, не имеет значения, то есть установленное значение тайм-аута не применяется, как ожидалось.
То же самое поведение при явном применении через работает.
Есть идеи?
Поведение:
[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
}