public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext) { MessageInfo messageInfo = new MessageInfo { ServerTimeStamp = DateTime.Now, Platform = "WCF" }; OperationDescription operationDesc = GetOperationDescription(ref messageInfo, OperationContext.Current); if (operationDesc != null) { Type contractType = operationDesc.DeclaringContract.ContractType; messageInfo.Action = operationDesc.Name; messageInfo.TypeName = contractType.FullName; messageInfo.AssemblyName = contractType.Assembly.GetName().Name; } messageInfo.ServerName = Dns.GetHostName(); messageInfo.ServerProcessName = AppDomain.CurrentDomain.FriendlyName; string message = String.Format("Request => {0} {1}", messageInfo.ServerTimeStamp.ToString(CultureInfo.InvariantCulture), messageInfo.Request); if (IsDisplayConsole) { Console.WriteLine(); Console.WriteLine(message); } if (IsLogFile) { _logger.Log(LogLevel.Info, message); } if (OnMessage != null) { OnMessage(this, new MessageInspectorArgs { MessageInspectionType = MessageInspectionType.Request, Message = messageInfo }); } return messageInfo; }
private OperationDescription GetOperationDescription(ref MessageInfo messageInfo, OperationContext operationContext) { OperationDescription od = null; string bindingName = operationContext.EndpointDispatcher.ChannelDispatcher.BindingName; string methodName; if (bindingName.Contains("WebHttpBinding")) { //REST request methodName = (string)operationContext.IncomingMessageProperties["HttpOperationName"]; messageInfo.Request = operationContext.IncomingMessageProperties["Via"].ToString(); } else { //SOAP request string action = operationContext.IncomingMessageHeaders.Action; methodName = operationContext.EndpointDispatcher.DispatchRuntime.Operations.FirstOrDefault(o => o.Action == action).Name; } EndpointAddress epa = operationContext.EndpointDispatcher.EndpointAddress; ServiceDescription hostDesc = operationContext.Host.Description; ServiceEndpoint ep = hostDesc.Endpoints.Find(epa.Uri); if (ep != null) { od = ep.Contract.Operations.Find(methodName); } return od; }