メッセージがカスタム属性で装飾されているかどうかを推測するために、リクエストメッセージの 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を介して参照されていません。