Inheritance: SyndicationServiceBase
Esempio n. 1
0
        public void Run()
        {
            SiteConfig          siteConfig     = SiteConfig.GetSiteConfig(configPath);
            ILoggingDataService loggingService = LoggingDataServiceFactory.GetService(logPath);
            IBlogDataService    dataService    = BlogDataServiceFactory.GetService(contentPath, loggingService);


            loggingService.AddEvent(new EventDataItem(EventCodes.XSSServiceStart, "", ""));

            do
            {
                try
                {
                    // reload on every cycle to get the current settings
                    siteConfig     = SiteConfig.GetSiteConfig(configPath);
                    loggingService = LoggingDataServiceFactory.GetService(logPath);
                    dataService    = BlogDataServiceFactory.GetService(contentPath, loggingService);

                    SyndicationServiceImplementation syndicator = new SyndicationServiceImplementation(siteConfig, dataService, loggingService);

                    if (siteConfig.EnableXSSUpstream &&
                        siteConfig.XSSUpstreamPassword != null &&
                        siteConfig.XSSUpstreamUsername != null)
                    {
                        try
                        {
                            MemoryStream  memoryStream = new MemoryStream();
                            StreamWriter  streamWriter = new StreamWriter(memoryStream, System.Text.Encoding.UTF8);
                            XmlSerializer ser          = new XmlSerializer(typeof(RssRoot));
                            RssRoot       root         = syndicator.GetRss();
                            ser.Serialize(streamWriter, root);



                            XmlStorageSystemClientProxy xssProxy = new XmlStorageSystemClientProxy();
                            if (siteConfig.XSSUpstreamEndpoint != null && siteConfig.XSSUpstreamEndpoint.Length > 0)
                            {
                                xssProxy.Url = siteConfig.XSSUpstreamEndpoint;
                            }

                            string rssFileName = "rss-dasblog.xml";
                            if (siteConfig.XSSRSSFilename != null && siteConfig.XSSRSSFilename.Length > 0)
                            {
                                rssFileName = siteConfig.XSSRSSFilename;
                            }

                            // the buffer is longer than the output and must be shortened
                            // by copying into a new buffer
                            byte[] rssBuffer          = new byte[memoryStream.Position];
                            byte[] memoryStreamBuffer = memoryStream.GetBuffer();
                            for (int l = 0; l < rssBuffer.Length; l++)
                            {
                                rssBuffer[l] = memoryStreamBuffer[l];
                            }


                            XSSSaveMultipleFilesReply reply =
                                xssProxy.SaveMultipleFiles(
                                    siteConfig.XSSUpstreamUsername,
                                    XmlStorageSystemClientProxy.EncodePassword(siteConfig.XSSUpstreamPassword),
                                    new string[] { rssFileName },
                                    new byte[][] { rssBuffer });

                            if (reply.flError)
                            {
                                loggingService.AddEvent(
                                    new EventDataItem(
                                        EventCodes.XSSUpstreamError, reply.message, null, null));
                            }
                            else
                            {
                                loggingService.AddEvent(
                                    new EventDataItem(
                                        EventCodes.XSSUpstreamSuccess, reply.message, rssFileName, xssProxy.Url));
                            }
                        }
                        catch (Exception e)
                        {
                            loggingService.AddEvent(
                                new EventDataItem(
                                    EventCodes.XSSUpstreamError, e.Message, e.StackTrace, null));
                        }
                    }

                    upstreamTrigger.WaitOne(TimeSpan.FromSeconds(siteConfig.XSSUpstreamInterval), false);

                    // introduce a little time offset to limit competition for the files.
                    Thread.Sleep(500);
                }
                catch (ThreadAbortException abortException)
                {
                    ErrorTrace.Trace(System.Diagnostics.TraceLevel.Info, abortException);
                    loggingService.AddEvent(new EventDataItem(EventCodes.XSSServiceShutdown, "", ""));
                    break;
                }
                catch (Exception e)
                {
                    // if the siteConfig can't be read, stay running regardless
                    // default wait time is 4 minutes in that case
                    Thread.Sleep(TimeSpan.FromSeconds(240));
                    ErrorTrace.Trace(System.Diagnostics.TraceLevel.Error, e);
                }
            }while (true);
            loggingService.AddEvent(new EventDataItem(EventCodes.XSSServiceShutdown, "", ""));
        }
Esempio n. 2
0
        public void Run()
        {
            SiteConfig siteConfig = SiteConfig.GetSiteConfig( configPath );
            ILoggingDataService loggingService = LoggingDataServiceFactory.GetService(logPath);
            IBlogDataService dataService = BlogDataServiceFactory.GetService(contentPath, loggingService );

            loggingService.AddEvent( new EventDataItem( EventCodes.XSSServiceStart, "",""));

            do
            {
                try
                {
                    // reload on every cycle to get the current settings
                    siteConfig = SiteConfig.GetSiteConfig( configPath );
                    loggingService = LoggingDataServiceFactory.GetService(logPath);
                    dataService = BlogDataServiceFactory.GetService(contentPath, loggingService );

                    SyndicationServiceImplementation syndicator = new SyndicationServiceImplementation(siteConfig, dataService, loggingService);

                    if ( siteConfig.EnableXSSUpstream &&
                         siteConfig.XSSUpstreamPassword != null &&
                         siteConfig.XSSUpstreamUsername != null )
                    {
                        try
                        {
                            MemoryStream memoryStream = new MemoryStream();
                            StreamWriter streamWriter = new StreamWriter( memoryStream, System.Text.Encoding.UTF8 );
                            XmlSerializer ser = new XmlSerializer( typeof( RssRoot ) );
                            RssRoot root = syndicator.GetRss();
                            ser.Serialize( streamWriter, root );

                            XmlStorageSystemClientProxy xssProxy = new XmlStorageSystemClientProxy();
                            if ( siteConfig.XSSUpstreamEndpoint != null && siteConfig.XSSUpstreamEndpoint.Length > 0 )
                            {
                                xssProxy.Url = siteConfig.XSSUpstreamEndpoint;
                            }

                            string rssFileName = "rss-dasblog.xml";
                            if ( siteConfig.XSSRSSFilename != null && siteConfig.XSSRSSFilename.Length > 0 )
                            {
                                rssFileName = siteConfig.XSSRSSFilename;
                            }

                            // the buffer is longer than the output and must be shortened
                            // by copying into a new buffer
                            byte[] rssBuffer = new byte[memoryStream.Position];
                            byte[] memoryStreamBuffer = memoryStream.GetBuffer();
                            for( int l=0;l<rssBuffer.Length;l++)
                            {
                                rssBuffer[l] = memoryStreamBuffer[l];
                            }

                            XSSSaveMultipleFilesReply reply =
                                xssProxy.SaveMultipleFiles(
                                    siteConfig.XSSUpstreamUsername,
                                    XmlStorageSystemClientProxy.EncodePassword(siteConfig.XSSUpstreamPassword),
                                    new string[]{rssFileName},
                                    new byte[][]{rssBuffer});

                            if ( reply.flError )
                            {
                                loggingService.AddEvent(
                                    new EventDataItem(
                                    EventCodes.XSSUpstreamError, reply.message, null, null));
                            }
                            else
                            {
                                loggingService.AddEvent(
                                    new EventDataItem(
                                    EventCodes.XSSUpstreamSuccess, reply.message, rssFileName, xssProxy.Url));
                            }

                        }
                        catch( Exception e )
                        {
                            loggingService.AddEvent(
                                new EventDataItem(
                                EventCodes.XSSUpstreamError, e.Message, e.StackTrace, null));
                        }
                     }

                    upstreamTrigger.WaitOne(TimeSpan.FromSeconds(siteConfig.XSSUpstreamInterval), false);

                    // introduce a little time offset to limit competition for the files.
                    Thread.Sleep(500);

                }
                catch( ThreadAbortException abortException )
                {
                    ErrorTrace.Trace(System.Diagnostics.TraceLevel.Info,abortException);
                    loggingService.AddEvent( new EventDataItem( EventCodes.XSSServiceShutdown, "",""));
                    break;
                }
                catch( Exception e )
                {
                    // if the siteConfig can't be read, stay running regardless
                    // default wait time is 4 minutes in that case
                    Thread.Sleep( TimeSpan.FromSeconds(240));
                    ErrorTrace.Trace(System.Diagnostics.TraceLevel.Error,e);
                }
            }
            while ( true );
            loggingService.AddEvent( new EventDataItem( EventCodes.XSSServiceShutdown, "",""));
        }