예제 #1
0
        private void Send(NLogEvents events, IEnumerable <AsyncLogEventInfo> asyncContinuations)
        {
            if (!this.OnSend(events, asyncContinuations))
            {
                return;
            }

#if WCF_SUPPORTED
            var client = CreateWcfLogReceiverClient();

            client.ProcessLogMessagesCompleted += (sender, e) =>
            {
                // report error to the callers
                foreach (var ev in asyncContinuations)
                {
                    ev.Continuation(e.Error);
                }

                // send any buffered events
                this.SendBufferedEvents();
            };

            this.inCall = true;
#if SILVERLIGHT
            if (!Deployment.Current.Dispatcher.CheckAccess())
            {
                Deployment.Current.Dispatcher.BeginInvoke(() => client.ProcessLogMessagesAsync(events));
            }
            else
            {
                client.ProcessLogMessagesAsync(events);
            }
#else
            client.ProcessLogMessagesAsync(events);
#endif
#else
            var client = new SoapLogReceiverClient(this.EndpointAddress);
            this.inCall = true;
            client.BeginProcessLogMessages(
                events,
                result =>
            {
                Exception exception = null;

                try
                {
                    client.EndProcessLogMessages(result);
                }
                catch (Exception ex)
                {
                    if (ex.MustBeRethrown())
                    {
                        throw;
                    }

                    exception = ex;
                }

                // report error to the callers
                foreach (var ev in asyncContinuations)
                {
                    ev.Continuation(exception);
                }

                // send any buffered events
                this.SendBufferedEvents();
            },
                null);
#endif
        }
예제 #2
0
        private void Send(NLogEvents events, IList <AsyncLogEventInfo> asyncContinuations, AsyncContinuation flushContinuations)
        {
            if (!OnSend(events, asyncContinuations))
            {
                if (flushContinuations != null)
                {
                    flushContinuations(null);
                }
                return;
            }

#if WCF_SUPPORTED
            var client = CreateLogReceiver();

            client.ProcessLogMessagesCompleted += (sender, e) =>
            {
                if (e.Error != null)
                {
                    InternalLogger.Error(e.Error, "LogReceiverServiceTarget(Name={0}): Error while sending", Name);
                }

                // report error to the callers
                for (int i = 0; i < asyncContinuations.Count; ++i)
                {
                    asyncContinuations[i].Continuation(e.Error);
                }

                if (flushContinuations != null)
                {
                    flushContinuations(e.Error);
                }

                // send any buffered events
                SendBufferedEvents(null);
            };

            inCall = true;
#if SILVERLIGHT
            if (!Deployment.Current.Dispatcher.CheckAccess())
            {
                Deployment.Current.Dispatcher.BeginInvoke(() => client.ProcessLogMessagesAsync(events));
            }
            else
            {
                client.ProcessLogMessagesAsync(events);
            }
#else
            client.ProcessLogMessagesAsync(events);
#endif
#else
            var client = new SoapLogReceiverClient(this.EndpointAddress);
            this.inCall = true;
            client.BeginProcessLogMessages(
                events,
                result =>
            {
                Exception exception = null;

                try
                {
                    client.EndProcessLogMessages(result);
                }
                catch (Exception ex)
                {
                    InternalLogger.Error(ex, "LogReceiverServiceTarget(Name={0}): Error while sending", Name);
                    if (ex.MustBeRethrownImmediately())
                    {
                        throw;          // Throwing exceptions here will crash the entire application (.NET 2.0 behavior)
                    }

                    exception = ex;
                }

                // report error to the callers
                for (int i = 0; i < asyncContinuations.Count; ++i)
                {
                    asyncContinuations[i].Continuation(exception);
                }

                if (flushContinuations != null)
                {
                    flushContinuations(exception);
                }

                // send any buffered events
                this.SendBufferedEvents(null);
            },
                null);
#endif
        }
예제 #3
0
        private void Send(NLogEvents events, IEnumerable <AsyncLogEventInfo> asyncContinuations)
        {
            if (!this.OnSend(events, asyncContinuations))
            {
                return;
            }

#if WCF_SUPPORTED
            WcfLogReceiverClient client;

            if (string.IsNullOrEmpty(this.EndpointConfigurationName))
            {
                // endpoint not specified - use BasicHttpBinding
                Binding binding;

#if !SILVERLIGHT2
                if (this.UseBinaryEncoding)
                {
                    binding = new CustomBinding(new BinaryMessageEncodingBindingElement(), new HttpTransportBindingElement());
                }
                else
#endif
                {
                    binding = new BasicHttpBinding();
                }

                client = new WcfLogReceiverClient(binding, new EndpointAddress(this.EndpointAddress));
            }
            else
            {
                client = new WcfLogReceiverClient(this.EndpointConfigurationName, new EndpointAddress(this.EndpointAddress));
            }

            client.ProcessLogMessagesCompleted += (sender, e) =>
            {
                // report error to the callers
                foreach (var ev in asyncContinuations)
                {
                    ev.Continuation(e.Error);
                }

                // send any buffered events
                this.SendBufferedEvents();
            };

            this.inCall = true;
#if SILVERLIGHT
            if (!Deployment.Current.Dispatcher.CheckAccess())
            {
                Deployment.Current.Dispatcher.BeginInvoke(() => client.ProcessLogMessagesAsync(events));
            }
            else
            {
                client.ProcessLogMessagesAsync(events);
            }
#else
            client.ProcessLogMessagesAsync(events);
#endif
#else
            var client = new SoapLogReceiverClient(this.EndpointAddress);
            this.inCall = true;
            client.BeginProcessLogMessages(
                events,
                result =>
            {
                Exception exception = null;

                try
                {
                    client.EndProcessLogMessages(result);
                }
                catch (Exception ex)
                {
                    if (ex.MustBeRethrown())
                    {
                        throw;
                    }

                    exception = ex;
                }

                // report error to the callers
                foreach (var ev in asyncContinuations)
                {
                    ev.Continuation(exception);
                }

                // send any buffered events
                this.SendBufferedEvents();
            },
                null);
#endif
        }