C#と諸々

C#がメインで他もまぁ諸々なブログです
おかしなこと書いてたら指摘してくれると嬉しいです(´・∀・`)
つーかコメント欲しい(´・ω・`)

--/--/-- --:--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
タグ:
トラックバック(-) | コメント(-) | このエントリーを含むはてなブックマーク
2007/04/22 23:28
当初の予定では、一元的なエラーハンドリングの方法を紹介することになっていましたが、その前に、サービスのカスタム属性として適用する独自のビヘイビアを定義する方法を紹介します。
コンフィギュレーションやコードから、サービスホストに対してビヘイビアを適用する方法は、こちらの「独自のビヘイビアを定義する」という記事を参照してください。

ビヘイビアには、サービス ビヘイビア、エンドポイント ビヘイビア、コントラクト ビヘイビア、オペレーション ビヘイビアの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
{
    /*...*/
}
タグ: .NET C# WCF











トラックバックURL↓
http://csharper.blog57.fc2.com/tb.php/124-ad82642e

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。