/// <summary> /// <see cref="System.ServiceModel.Dispatcher.IDispatchMessageInspector"/> /// </summary> /// <param name="request"><see cref="System.ServiceModel.Dispatcher.IDispatchMessageInspector"/></param> /// <param name="channel"><see cref="System.ServiceModel.Dispatcher.IDispatchMessageInspector"/></param> /// <param name="instanceContext"><see cref="System.ServiceModel.Dispatcher.IDispatchMessageInspector"/></param> /// <returns><see cref="System.ServiceModel.Dispatcher.IDispatchMessageInspector"/></returns> public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext) { if (IsEnabled) { OperationContext context = OperationContext.Current; MessageBuffer buffer = request.CreateBufferedCopy(int.MaxValue); request = buffer.CreateMessage(); if (context != null && buffer.BufferSize <= this.MaxMessageSize) { try { Message tmpMesage = buffer.CreateMessage(); Process CurrentProcess = Process.GetCurrentProcess(); IIdentity SourceIdentity = GenericPrincipal.Current.Identity; MessageProperties messageProperties = context.IncomingMessageProperties; RemoteEndpointMessageProperty endpointProperty = messageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty; IIdentity ClientIdentity = null; if (context.ServiceSecurityContext != null) { ClientIdentity = context.ServiceSecurityContext.PrimaryIdentity; } WcfEvent wcfEvent = new WcfEvent() { MessageID = Guid.NewGuid(), ProcessID = CurrentProcess.Id, ThreadID = Thread.CurrentThread.ManagedThreadId, TimeCreated = DateTime.Now, ServiceName = context.Host.Description.Name, ServiceMachineName = Environment.MachineName, ServiceUri = context.Channel.LocalAddress.ToString(), ServiceIP = context.Channel.LocalAddress.Uri.Host, ServicePort = context.Channel.LocalAddress.Uri.Port, ServiceIdentity = SourceIdentity.Name, ServiceAuthenticationType = SourceIdentity.AuthenticationType, ClientIP = endpointProperty.Address, ClientPort = endpointProperty.Port, ClientIdentity = ClientIdentity == null ? "Anonymous" : ClientIdentity.Name, ClientAuthenticationType = ClientIdentity == null ? "None" : ClientIdentity.AuthenticationType, Action = request.Headers.Action, Request = tmpMesage.GetReaderAtBodyContents().ReadOuterXml(), Response = null, Misc = null, IsFault = request.IsFault }; return(wcfEvent); } catch (Exception ex) { if (!System.Diagnostics.EventLog.SourceExists(this.EventLogSource)) { System.Diagnostics.EventLog.CreateEventSource(this.EventLogSource, this.EventLogName); } System.Diagnostics.EventLog.WriteEntry(this.EventLogSource, ex.ToString(), System.Diagnostics.EventLogEntryType.Error); } } } return(null); }
private bool ServiceLogFilter(object item) { try { WcfEvent row = (WcfEvent)item; if (row.LogLevel == "Trace" && !LogFilterTrace) { return(false); } else if (row.LogLevel == "Debug" && !LogFilterDebug) { return(false); } else if (row.LogLevel == "Info" && !LogFilterInfo) { return(false); } else if (row.LogLevel == "Warn" && !LogFilterWarn) { return(false); } else if (row.LogLevel == "Error" && !LogFilterError) { return(false); } else if (row.LogLevel == "Fatal" && !LogFilterFatal) { return(false); } Model.QueriesRow Row = ActiveModel.Queries.FindByPK(row.Query); if (Row != null && !Row.Logged) { return(false); } return(true); } catch { return(true); } }
/// <summary> /// <see cref="System.ServiceModel.Dispatcher.IDispatchMessageInspector"/> /// </summary> /// <param name="reply"><see cref="System.ServiceModel.Dispatcher.IDispatchMessageInspector"/></param> /// <param name="correlationState"><see cref="System.ServiceModel.Dispatcher.IDispatchMessageInspector"/></param> public void BeforeSendReply(ref Message reply, object correlationState) { if (correlationState != null && correlationState.GetType() == typeof(WcfEvent)) { WcfEvent wcfEvent = (WcfEvent)correlationState; wcfEvent.IsFault = reply.IsFault; if (this.LogRequestOnly && wcfEvent.Request.Length <= this.MaxMessageSize) { Task.Factory.StartNew(() => AddWcfEvent((WcfEvent)correlationState)); } else { MessageBuffer buffer = reply.CreateBufferedCopy(int.MaxValue); reply = buffer.CreateMessage(); if (buffer.BufferSize + wcfEvent.Request.Length <= this.MaxMessageSize) { wcfEvent.Response = buffer.CreateMessage().GetReaderAtBodyContents().ReadInnerXml(); Task.Factory.StartNew(() => AddWcfEvent(wcfEvent)); } } } }
private void AddWcfEvent(WcfEvent wcfEvent) { try { using (SqlConnection con = new SqlConnection(this.ConnectionString)) { SqlCommand objCommand = new SqlCommand(); objCommand.Connection = con; objCommand.CommandText = "AddSSOManagerEvents"; objCommand.CommandType = CommandType.StoredProcedure; objCommand.Parameters.AddRange(new SqlParameter[] { new SqlParameter("@MessageID", wcfEvent.MessageID), new SqlParameter("@ProcessID", wcfEvent.ProcessID), new SqlParameter("@ThreadID", wcfEvent.ThreadID), new SqlParameter("@TimeCreated", wcfEvent.TimeCreated), new SqlParameter("@ServiceName", wcfEvent.ServiceName), new SqlParameter("@ServiceMachineName", wcfEvent.ServiceMachineName), new SqlParameter("@ServiceUri", wcfEvent.ServiceUri), new SqlParameter("@ServiceIP", wcfEvent.ServiceIP), new SqlParameter("@ServicePort", wcfEvent.ServicePort), new SqlParameter("@ServiceIdentity", wcfEvent.ServiceIdentity), new SqlParameter("@ServiceAuthenticationType", wcfEvent.ServiceAuthenticationType), new SqlParameter("@ClientIP", wcfEvent.ClientIP), new SqlParameter("@ClientPort", wcfEvent.ClientPort), new SqlParameter("@ClientIdentity", wcfEvent.ClientIdentity), new SqlParameter("@ClientAuthenticationType", wcfEvent.ClientAuthenticationType), new SqlParameter("@Action", wcfEvent.Action), new SqlParameter("@IsFault", wcfEvent.IsFault) }); if (string.IsNullOrEmpty(wcfEvent.Request)) { objCommand.Parameters.Add(new SqlParameter("@Request", DBNull.Value)); } else { objCommand.Parameters.Add(new SqlParameter("@Request", wcfEvent.Request)); } if (string.IsNullOrEmpty(wcfEvent.Response)) { objCommand.Parameters.Add(new SqlParameter("@Response", DBNull.Value)); } else { objCommand.Parameters.Add(new SqlParameter("@Response", wcfEvent.Response)); } if (string.IsNullOrEmpty(wcfEvent.Misc)) { objCommand.Parameters.Add(new SqlParameter("@Misc", DBNull.Value)); } else { objCommand.Parameters.Add(new SqlParameter("@Misc", wcfEvent.Misc)); } con.Open(); objCommand.ExecuteNonQuery(); } } catch (Exception ex) { if (!System.Diagnostics.EventLog.SourceExists(this.EventLogSource)) { System.Diagnostics.EventLog.CreateEventSource(this.EventLogSource, this.EventLogName, "."); } System.Diagnostics.EventLog.WriteEntry(this.EventLogSource, ex.ToString(), System.Diagnostics.EventLogEntryType.Error); } }