Forum

WCF Web servisinden...
 
Bildirimler
Hepsini Temizle

WCF Web servisinden (IIS üzerinde) günlük mail atma

7 Yazılar
2 Üyeler
0 Reactions
823 Görüntüleme
(@ErkaniNANC)
Gönderiler: 123
Estimable Member
Konu başlatıcı
 
Merhaba Arkadaşlar
IIS üzerinde çalışan wcf bir servisim var bu servis db ile uygulama arasındaki akışı sağlamakatadır.
Amacın wcf bir web servis ile günlük olarak belli bir saatte mail atmak.Mail atma olaylarından çok (IIS üzerindeki servisten bahsediyorum)
bu yapı ile bunu yapabilir miyim .Çünkü baktığım hemen her kaynak windows servis önermiş.Windows servisi biliyorum daha önce bu ve benzeri bir yapıyı yapmıştım.
Ancak bu sefer web servis üzerinden yapmak istiyorum. Timer belirleyeyim, zamanı geldiğinde mail atacak(Mail olayına takılmayın) bir servis.
Olur mu bu yöntemin,bilen arkadaşlar yardımcı olursa sevinirim.
 
Gönderildi : 13/04/2015 17:38

(@eravse)
Gönderiler: 1753
Üye
 

Merhaba ,

Global icine bir servis yazın sunun gibi start degılse calıssın 

      protected void Application_Start(object sender, EventArgs e)

        {

            if (!PushService.IsStarted)

            {

                new PushService().Start();

            }

        }

 

sonra buna bır background worker classı yazın

 

 

  public void Start()

        {

            try

            {

           

                if (m_BackgroundWorker == null)

                {

                  

                    ThreadStart start = new ThreadStart(BackgroundProcessing);

                    m_BackgroundWorker = new Thread(start);

                    m_BackgroundWorker.Start();

                    IsStarted = true;

                }

            }

            catch (Exception ex)

            {

                MailMessage m = new MailMessage();

                m.To.Add("[email protected]");

              

                m.Subject = " SERVICE ERROR. LINE 50";

                m.IsBodyHtml = true;

                m.Body = ex.Message;

                SendEmail(m);

            }

            finally

            {

              //  Monitor.Exit(m_Lock);

            }

        }

 

 gibi devam edin 

 

Saygılarımla

 

 

ProfectSoft Yazılım ve Danışmanlık Hizmetleri
LogPusher & Bifyou E-Commerce System
www.profectsoft.com

 
Gönderildi : 13/04/2015 18:01

(@ErkaniNANC)
Gönderiler: 123
Estimable Member
Konu başlatıcı
 

Merhaba ,

Global icine bir servis yazın sunun gibi start degılse calıssın 

      protected void Application_Start(object sender, EventArgs e)

        {

            if (!PushService.IsStarted)

            {

                new PushService().Start();

            }

        }

 

sonra buna bır background worker classı yazın

 

 

  public void Start()

        {

            try

            {

           

                if (m_BackgroundWorker == null)

                {

                  

                    ThreadStart start = new ThreadStart(BackgroundProcessing);

                    m_BackgroundWorker = new Thread(start);

                    m_BackgroundWorker.Start();

                    IsStarted = true;

                }

            }

            catch (Exception ex)

            {

                MailMessage m = new MailMessage();

                m.To.Add("[email protected]");

              

                m.Subject = " SERVICE ERROR. LINE 50";

                m.IsBodyHtml = true;

                m.Body = ex.Message;

                SendEmail(m);

            }

            finally

            {

              //  Monitor.Exit(m_Lock);

            }

        }

 

 gibi devam edin 

 

Saygılarımla

 

 

 

Hocam cevap için teşekkürler

C# wcf kullanıyorum. Global.asax yok yani. Şimdi durum şu

Şu anda hali hazırda çalışan bir wcf web servisim var ve winform uygulamam bu servisle db dene veri akışı sağlıyor buraya kadar normal herşey.

Ben aynı web servise mail gönderme eklemek istiyorum ve bunun belli bir zaman aralığında tekrar etmesini istiyorum. Şimdi öncelikle bu mümkünmü.Yani windows servisteki şu yapıyı web serviste oluşturamadım

 

   private System.Timers.Timer _timer

  public AppService()

        {

            InitializeComponent();

        }

        protected override void OnStart(string[] args)

        {

            base.OnStart(args);

            _timer = new System.Timers.Timer(30000);

            _timer.Elapsed += _timer_Elapsed;

            _timer.Start();

        }

        protected override void OnStop()

        {

        }

        void _timer_Elapsed(object sender, ElapsedEventArgs e)

        {

            WriteTimeToFile();

        } 

 

 

örneğin  override void OnStart(string[] args) fonksiyonu bulunmuyor .Veya yanlış yöntem izliyorum.Anlayamadım tam.

 
Gönderildi : 13/04/2015 18:19

(@eravse)
Gönderiler: 1753
Üye
 

Hocam 🙂 Çalışan bir koddan verdim sana sağ click add global.asax 

Yanı iis üzerinde çalışan bir web uygulaması neticede WCF sen oraya timer koyarsan belli bir müddet sonra sıkıntı yaşayabilirsin.

 

*** Tabi bu arada Siz WCF i ne olarak açtınız ? WCF app mi WCF Service APP mi o önemli. 

 bir email ulaştırırsanız özelden size bir uygulama kodu gonderebılırım .

 Saygılarımla 


 

ProfectSoft Yazılım ve Danışmanlık Hizmetleri
LogPusher & Bifyou E-Commerce System
www.profectsoft.com

 
Gönderildi : 13/04/2015 18:56

(@ErkaniNANC)
Gönderiler: 123
Estimable Member
Konu başlatıcı
 

Tamam hocam teşekkürler ilginizden dolayı

 WCF ten vazgeçtim.ASP Web servis şeklinde tasarladım.Ancak şöyle bir durum var localde 5 dakikada bir servis run oluyor ancak IIS in altına 

atınca servis 5 dakika da bir run olmuyor.Sorun ne olabilir hocam sizce eksik nedir acaba. 

 

 
Gönderildi : 14/04/2015 18:01

(@ErkaniNANC)
Gönderiler: 123
Estimable Member
Konu başlatıcı
 

ISS de servis çalışıyor normalde sağ click gözat deyince sorunsuz geliyor. Ancak run olayı yapmıyor.Fonksiyon sadece bi tane txt açmave değer yazma şeklinde.Ancak Localde bunu yapmasına rağmen IIS altında yapmıyor

 
Gönderildi : 14/04/2015 18:06

(@eravse)
Gönderiler: 1753
Üye
 

Çok geniş bir durum. 

1 - Yetkilendirme sorunu olabilir

2 - timerda session ddüştüğü zaman çalışmaz. Web servise bu tip bir durum yazmanız zaten servisin kullanılmasına aykırı.

3 - Web servisler json / xml yada diğer verilerin sizin diper cihazlarınızda ortak kullanılmasına yaradıgından bunu bir zamanlanmış görev olarak kullanmamanız daha doğru olur.

4 - kod muhtemelen bu saydığım sebeplerden bir hataya düşüyordur. try catch blokları arasına hatayı maıl atan yada txt yazan kod koyun.

5 - 4 uncu madde yerıne log4net de kullanabilirsiniz.

su anda aklıma spontan gelenler bunlar.

 

saygılarımla

 

ProfectSoft Yazılım ve Danışmanlık Hizmetleri
LogPusher & Bifyou E-Commerce System
www.profectsoft.com

 
Gönderildi : 14/04/2015 20:09

Paylaş: