2

以下のように、WCF サービスを保護するために IServiceBehavior を実装する属性があります。

public class AuthorizedServiceAttribute : Attribute, IServiceBehavior
{
    #region IServiceBehavior Members

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

    public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    {
        var token = string.Empty; // to do: get the token from message headers

        foreach (var operation in serviceHostBase.Description.Endpoints
            .SelectMany(endpoint => endpoint.Contract.Operations))
        {
            operation.Behaviors.Add(new AuthorizedMethodAttribute { Token = token });
        }
    }

    public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    { }

    #endregion
}

問題は、メッセージ ヘッダーを取得することです。現在の OperationContext を取得する必要がありますが、ApplyDispatchBehavior 内でそれを行う方法がわかりません。安全な方法でそれを行うと、機能します。

4

1 に答える 1