Beispiel #1
0
        private object InvokeWithMonitor(object instance, object[] inputs, out object[] outputs)
        {
            ServiceMethodConfigurationElement methodElement = ServiceSettings.GetConfig().GetMethodElementByOperationContext();

            object[] result = null;

            if (methodElement != null)
            {
                PerformanceMonitorHelper.DefaultMonitorName = MonitorName;
                MonitorData md = PerformanceMonitorHelper.StartMonitor(MonitorName);

                md.MonitorName     = string.Format("{0}.{1}", OperationContext.Current.GetContractName(), OperationContext.Current.GetMethodName());
                md.EnableLogging   = methodElement.EnableLogging;
                md.EnablePFCounter = methodElement.EnablePFCounter;

                md.InstanceName = md.MonitorName;
                md.Context["GlobalInstance"] = new WebMethodServerCounters("_Total_");
                md.Context["Instance"]       = new WebMethodServerCounters(md.InstanceName);

                if (md.EnableLogging)
                {
                    md.LogWriter.WriteLine("请求{0}的开始时间: {1:yyyy-MM-dd HH:mm:ss.fff}", md.MonitorName, SNTPClient.AdjustedTime);
                }

                try
                {
                    PerformanceMonitorHelper.GetDefaultMonitor().WriteExecutionDuration(md.MonitorName,
                                                                                        () =>
                    {
                        result = this.InternalInvoke(instance, inputs);
                    });
                }
                catch (System.Exception ex)
                {
                    md.HasErrors = true;

                    if (md.EnableLogging)
                    {
                        ex.WriteToEventLog(md.MonitorName, EventLogEntryType.Error, 8010);
                    }

                    throw;
                }
                finally
                {
                    CommitMonitorData();
                }
            }
            else
            {
                result = this.InternalInvoke(instance, inputs);
            }

            outputs = (object[])result[1];

            return(result[0]);
        }
        private static ServiceMethodConfigurationElement GetMethodSettings(string methodName)
        {
            ServiceSettings settings = ServiceSettings.GetConfig();

            ServiceMethodConfigurationElement result = null;

            ServiceConfigurationElement serviceElement = settings.Services[typeof(AppSecurityCheckService).FullName];

            if (serviceElement != null)
            {
                result = serviceElement.Methods[methodName];
            }

            return(result ?? settings.MethodDefaultSettings);
        }
        private static ServiceMethodConfigurationElement GetMethodSettings(SimpleRequestSoapMessage requestMessage)
        {
            ServiceSettings settings = ServiceSettings.GetConfig();

            ServiceMethodConfigurationElement result = null;

            ServiceConfigurationElement serviceElement = settings.Services[requestMessage.ServiceName];

            if (serviceElement != null)
            {
                result = serviceElement.Methods[requestMessage.Action];
            }

            return(result ?? settings.MethodDefaultSettings);
        }