コンフィギュレーションやコードから、サービスホストに対してビヘイビアを適用する方法は、こちらの「独自のビヘイビアを定義する」という記事を参照してください。
ビヘイビアには、サービス ビヘイビア、エンドポイント ビヘイビア、コントラクト ビヘイビア、オペレーション ビヘイビアの4種類がありますが、このうち、エンドポイント ビヘイビア以外のビヘイビアは、カスタム属性として定義することもできます。
例えば、サービス ビヘイビアは IServiceBehavior インターフェイス (System.ServiceModel.Description) を実装するクラスとして定義し、更に Attribute クラス (System) を継承させます。
以下に、サービス ビヘイビアの実装例を示します。
using System;
using System.Collections.ObjectModel;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Description;
[AttributeUsage(AttributeTargets.Class)]
public sealed class HelloWorldBehaviorAttribute : Attribute, IServiceBehavior
{
private bool silent;
public bool Silent
{
get
{
return this.silent;
}
set
{
this.silent = value;
}
}
public HelloWorldBehaviorAttribute()
{
this.silent = false;
}
void IServiceBehavior.AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
{
}
void IServiceBehavior.ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
if (this.silent)
{
return;
}
serviceHostBase.Opened +=
delegate
{
Console.WriteLine("Hello World !");
};
}
void IServiceBehavior.Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
}
}
このサービス ビヘイビアを適用すると、前回と同じく、サービス ホストのオープン時にコンソールへ "Hello World !" と出力します。
以下に、適用例を示します。
[HelloWorldBehavior(Silent = false)]
public sealed class Service1 : IService1
{
/*...*/
}
トラックバックURL↓
http://csharper.blog57.fc2.com/tb.php/124-ad82642e