如何在WCF服务的服务行为中获取请求消息的类型(如request.GetType中)

时间:2014-03-24 22:28:35

标签: c# wcf servicebehavior idispatchmessageinspector

我正在编写一个自定义的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"}

有没有办法可以使用请求推断出邮件的类型?

注意:我直接引用了保存合同的程序集,并且不通过wsdl引用服务。

1 个答案:

答案 0 :(得分:1)

上述问题的解决方案不是使用MessageInspector(如 IDispatchMessageInspector IClientMessageInspector )而是使用参数Inspector(如 IParameterInspector )。

在BeforeCall方法中,我们可以执行以下操作:

public object BeforeCall(string operationName, object[] inputs)
{

        var request = inputs[0];

        var typeOfRequest = request.GetType();

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