我有一個服務的自定義行爲,我想指定一個接收超時值,我已經創建了一個行爲,並在構建服務頭。服務行爲沒有正確應用
我使用聲明性屬性來應用行爲或按照我的想法。但是這種行爲似乎沒有什麼區別,即設置的超時值沒有如預期那樣得到應用。
通過明確應用時的相同行爲確實有效。 任何想法?
行爲:
[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