我正在编写一个自定义的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引用服务。
答案 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;
}
}