0

メッセージがカスタム属性で装飾されているかどうかを推測するために、リクエストメッセージの Type を知っていることを期待するカスタム ServiceBehavior を作成しています。

サンプル コントラクトは次のようになります。

    [DataContract]
[Auditable]
public class CompositeType
{
    bool boolValue = true;
    string stringValue = "Hello ";

    [DataMember]
    [Audit]
    public bool BoolValue
    {
        get { return boolValue; }
        set { boolValue = value; }
    }

    [DataMember]
    [Audit]
    public string StringValue
    {
        get { return stringValue; }
        set { stringValue = value; }
    }
}

次を使用して、動作側でカスタム属性を識別しようとしています。

public object AfterReceiveRequest(ref Message request, IClientChannel channel,
    InstanceContext instanceContext)
{
    var typeOfRequest = request.GetType();

    if (!typeOfRequest.GetCustomAttributes(typeof (AuditableAttribute), false).Any())
    {
        return null;
    }
}

しかし、typeOfRequestは常に{Name = "BufferedMessage" FullName = "System.ServiceModel.Channels.BufferedMessage"}として入ってきます

request を使用してメッセージのタイプを推測できる方法はありますか?

注:コントラクトを保持するアセンブリを直接参照していますが、サービスはwsdlを介して参照されていません。

4

1 に答える 1