/// <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);
 }
예제 #2
0
        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);
            }
        }