我有一个服务的自定义行为,我想指定一个接收超时值,我已经创建了一个行为,并在构建服务头。服务行为没有正确应用
我使用声明性属性来应用行为或按照我的想法。但是这种行为似乎没有什么区别,即设置的超时值没有如预期那样得到应用。
通过明确应用时的相同行为确实有效。 任何想法?
行为:
[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
}
Withing公司,我们有一个共同的组件创建服务主机等,所以,我们必须使用这一点,所以延长了超时的唯一方法正确,我觉得使用行为。 但是我设法使用declrative属性来使它工作。我不得不将ApplyDispatchBehavior()中的代码移动到AddBindingParameters()。 – Rubans 2010-04-16 09:58:50