Service behavior not being applied correctly

Posted by Rubans on Stack Overflow See other posts from Stack Overflow or by Rubans
Published on 2010-04-15T17:27:14Z Indexed on 2010/04/15 17:33 UTC
Read the original article Hit count: 200

Filed under:
|
|

I have a custom behavior for a service where I want to specify a receive timeout value, I have created a behavior and on the build service header.

I use the declarative attribute to apply the behavior or as I thought. But the behavior seems to make no difference, i.e. the set timeout value is not being applied as expected. However when I have noticed the behavior is only being applied when the host is opened rather than when created.

The same behavior when applied explicitly through does work. Any ideas?

Behavior:

[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; }
}

Service code:

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

© Stack Overflow or respective owner

Related posts about c#

Related posts about wcf