1

WCFサービスがあります。ServiceContractを実装するクラスにIServiceBehaviorを実装する必要があります。そのクラスには、サービスの動作を指定するいくつかの属性があります。IServiceBehaviorを実装した後も、属性で指定された動作が引き続き適用されるかどうかを確認したいと思いました。

基本的には

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, 
                 ConcurrencyMode = ConcurrencyMode.Multiple)]
public class MyService : IMyService
{
...
}

と同じ意味

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, 
                 ConcurrencyMode = ConcurrencyMode.Multiple)]
public class MyService : IMyService, IServiceBehavior
{
...
}

同じことで、私はまだ持っていることを意味しますServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)

IServiceBehaviorの実装は次のとおりです。

void AddBindingParameters(ServiceDescription serviceDescription, 
                          ServiceHostBase serviceHostBase, 
                          Collection<ServiceEndpoint> endpoints, 
                          BindingParameterCollection bindingParameters)
{            
}

void ApplyDispatchBehavior(ServiceDescription serviceDescription, 
                           ServiceHostBase serviceHostBase)
{
    IErrorHandler handler = new ErrorHandler();
    foreach (ChannelDispatcher dispatcher in serviceHostBase.ChannelDispatchers)
    {
        dispatcher.ErrorHandlers.Add(handler);
    }
}

void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{            
}

中央のエラー処理を実装したいだけで、他の方法でサービスの動作を変更したくありません。

手伝ってくれてありがとう。

4

1 に答える 1

2

はい、ServiceBehaviorAttributeの動作は引き続き適用されます。IServiceBehaviorは、ランタイムをさらにカスタマイズする方法を提供するだけです。

于 2009-08-17T08:24:57.480 に答える