Pergunta

Temos um site onde precisamos de um programador para receber notificações (e-mail) no tempo específico. por exemplo. uma pessoa definir lembrete às 5 da tarde para participar da reunião às 4:45 PM, receberá e-mail às 4:45 PM Sobre o mesmo.

Como este site está hospedado em servidor compartilhado, não temos qualquer controle sobre o servidor para executar qualquer trabalho SQL ou aplicação programador.

Existe alguma coisa em asp.net que pode ajudar neste cenário?

Foi útil?

Solução

Como sobre este: Simular um serviço do Windows utilizando ASP.NET para executar tarefas agendadas .

Em um ponto esta técnica foi usado em Stack Overflow , embora eu não acho que isso é mais.

Para ser honesto, parece que um corte desagradável, passível de erro para mim, mas se você é incapaz de executar qualquer coisa no servidor, exceto o seu site, então algo como esta é provavelmente sua única opção.

Outras dicas

Você precisa ter um trabalho feito no servidor, mas você não tem boa maneira de desencadear-lo do ASP.NET?

Como sobre a criação de uma página web que irá iniciar o seu trabalho, e ter um temporizador de correr em outro lugar (ie. Em outro computador) que os pedidos dessa página. (Apenas bater a página para acionar você empregos)

Eu tive o mesmo problema que você e eu acabei com uma programação de um serviço que utilizam Quartz.NET: http: //quartznet.sourceforge.net/ e se conectar ao mesmo banco de dados do site.

Com ASP.NET você não está garantido que a sua aplicação está vivo em todos os momentos, e, portanto, aplicações web como um processo de host para uma solução de programação não é viável IMO.

serviço

A Windows é o que você precisa para este cenário. Você tem controle total sobre como iniciar e parar o processo, bem como formas de controlo da aplicação.

Você é capaz de acolher um tal serviço em uma máquina diferente? Mesmo que a aplicação web está sendo executado em um servidor hospedado não significa que você tem que executar o planejador no mesmo servidor.

Se você realmente não tem controle sobre o servidor (ou seja, você não pode usar um trabalho sql, uma tarefa agendada, ou instalar um servidor Windows), então você poderia usar um System.Threading.Timer que você inicializar em sua Global.asax (por exemplo, na inicialização do aplicativo) que invoca um determinado método na sua aplicação a cada x minutos. Este método seria, então consultar seu banco de dados e ver o que as notificações precisam ser enviados.

Isto não é realmente uma abordagem desejável, porém, como o temporizador não é garantida para sempre invocar tanto quanto eu sei, uma vez que, como Pedro diz, sua aplicação web não é garantido para estar vivo em todos os momentos.

No entanto, dependendo de suas necessidades, ele ainda pode ser uma abordagem 'suficientemente bom' se você não tem outras opções.

No entanto, se você realmente é completamente preso e não têm escolha, mas para hospedá-lo em seu WebApp,

Você pode olhar para a criação de uma instância System.Timers.Timer em seu arquivo Global.asax.cs. Conectar um evento decorrido, como faria normalmente, e dar-lhe algum código que faz algo ao longo das linhas

protected void myTimer_Elapsed(object sender, EventArgs e)
{
    if(System.DateTime.Now Falls in Some Configured Time-Window)
        //Do Stuff
}

Mas, como alguém salientou, não é garantido que o IIS pode ser redefinir durante esse período, caso em que você vai perdê-la.

Não é realmente desejável fazer, mas você pode fazer o Razzie está sugerindo. Eu já vi isso feito muitas vezes. Embora feio, às vezes ya apenas tem que fazer os hacks feios.

Usando este método, porém, você tem que ter certeza que você aplicativo não é descarregado. Então você precisa de algum tipo de manter viva. Gostaria de sugerir a criação de uma ferramenta de monitoramento web que constantemente puxar uma página (aspx) para manter o aplicativo vivo. Esses caras são livres http://mon.itor.us/

Eu não acredito que você, porque fonte código de Quartz.Net (1.0 e 1.0.1) não compilar em Visual Studio.Net 2005 e 2008. A única maneira Para chegar Quartz.Net é usar toda pacote Spring.Net, que compila bem sob VS.Net 2005 e 2008

A menos que você poderia compartilhar algumas dicas, como para compilar e uso quartz.dll em projeto asp.net! (Página web da Quartz.Net e readme.txt não fornecer qualquer informação sobre fonte coude compilação) Cada dica é bem-vindos!

Eu tive problemas no início também, mas isso é porque o necessário AsemblyInfo.cs está contido na pasta pai. Além disso, você vai precisar adicionar os três DLLs que estão incluídos.

Eu não acredito que você, porque o código fonte de Quartz.Net (1.0 e 1.0.1) não compila em Visual Studio.Net 2005 e 2008. A única maneira de obter Quartz.Net é usar toda Primavera .net pacote, que compila bem sob VS.Net 2005 e 2008

A menos que você poderia compartilhar algumas dicas, como compilar e uso quartz.dll no projeto asp.net! (Página web da Quartz.Net e readme.txt não fornece qualquer informação sobre compilação fonte coude) Cada dica é bem-vinda!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top