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

本文关键字:类型 消息 gettype request 请求 WCF 服务 服务行 获取 | 更新日期: 2023-09-27 17:53:21

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

但是类型频率总是以{Name = "BufferedMessage" FullName = "System.ServiceModel.Channels.BufferedMessage"}

是否有一种方法可以通过使用请求来推断消息的类型?

注意:我有一个对包含契约和服务的程序集的直接引用,而不是通过wsdl引用。

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

解决上述问题的方法是不使用MessageInspector(如IDispatchMessageInspectorIClientMessageInspector),而是使用参数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;
        }
}