Como Criar um Componente DLL WEB do Tipo TRIAL
Olá Consultores DevMedia, bom dia, espero que tenham paciência comigo pois esta é a primeira de muitas dúvidas que postarei neste forum
Bem a minha primeira duvida condiz no seguinte estou criando uma Class Library, um componente Web Asp.Net, do qual a lógica ou seu objetivo seria
A)O Componente ou alguns métodos deste Componente Web, teriam funcionalidade do tipo trial (Validade por um determinado período) após o mesmo seria reativado mediante uma chave que o meu site enviaria para o usuário cadastrado em meu BD
B)A Chave teria validade por dominio e/ou webapplication em que o usuário cliente utilizária
C)Criei uma pequena class teste para enviar a vcs Consultores DevMedia por aqui para que me dessem uma mão de como este componente poderia sêr utilizado e validado nessa lógica afinal não é um componente windows é um componente para web, ou seja não basta para ele têr acredito eu, alguma validade no registro do windows pois essa validade se fosse assim iria influir nos usuários deste usuario que acessassem este site, o que tornaria meu componente inviavel para utilização, a validade e a chave de ativação teria a haver com a APLICAÇÃO E O DOMINIO
Aqui eu posto um codigo exemplo da minha class sem rotinas de validação e ativação e fico no aguardo de algum exemplo ou como fazer essa logica funcionar no componente e desde já agradeço aos CONSULTORES DEVMEDIA, caso possam me ajudar nesta.
using System;
using System.Collections.Generic;
using System.Text;
namespace MinhaEmpresa.TesteCompShareware
{
public class Class1
{
//Método Comp Web Com Periodo de Validade
//Após só com utilização de Liberação ou Ativação
protected void demo(string chaveativacao)
{
//Aqui o código do método mas com validação
//de funcionalidade por data de expiração
//reativado mediante chave
return chaveativacao
}
protected void livre(string metodolivre)
{
//Aqui o código livre da classlibrary
return metodolivre
}
}
}
Luiz Franco
Curtidas 0
Respostas
Luiz Maia
03/02/2009
Ola Luiz Antonio, seja bem vindo ao DevMedia.
Bom, sua dúvida é relativamente simples.
Primeira vc deve criar um metodo que sera chamadao do Main em sua Class Lybrary que toda vez que ele é executado vc faz uma verificação de datas existente em algum lugar, vc pode gravar a data de expiração num Banco de Dados, num, arquivo txt criptografado ou numa chave de regsitro do windows.
E toda vez que a DLL for invocada, vc faz a verificação da data, caso seja expirada não executa os outros métodos da DLL.
Ao enviar a chave de registro e valida-la vc executa outro metodo que muda esta data para um valor tipo: "valido". Segue exemplo:
namespace ClassLibrary1
{
public class Class1
{
public void VerificaValidade()
{
string valorParametroExpiracao;
bool DataExpirada; if (Descriptografar(valorParametroExpiracao) == "valido")
{
// executa os metodos pertinentes
}
else
{
if (DataExpirada)
{
// sair da dll
}
else
{
if (DataExpiracao - 8)
{
// vc tem 8 dias até a expiração do componente NONON, adquira sua licença
} // executa os metodos pertinentes
}
}
}
}
}
Lembrando que este procedimento é o mais simples para desenvolvimento de componentes TRIAL, e o mesmo não pode ser burlado caso o usuário mude a data do sistema, o que não acontece caso seu componente fique num HOST, já que é uma aplicação WEB. Aguardo seu retorno. Espero ter ajudado e sucesso em sua aplicação. Att Luiz Maia
{
public class Class1
{
public void VerificaValidade()
{
string valorParametroExpiracao;
bool DataExpirada; if (Descriptografar(valorParametroExpiracao) == "valido")
{
// executa os metodos pertinentes
}
else
{
if (DataExpirada)
{
// sair da dll
}
else
{
if (DataExpiracao - 8)
{
// vc tem 8 dias até a expiração do componente NONON, adquira sua licença
} // executa os metodos pertinentes
}
}
}
}
}
Lembrando que este procedimento é o mais simples para desenvolvimento de componentes TRIAL, e o mesmo não pode ser burlado caso o usuário mude a data do sistema, o que não acontece caso seu componente fique num HOST, já que é uma aplicação WEB. Aguardo seu retorno. Espero ter ajudado e sucesso em sua aplicação. Att Luiz Maia
GOSTEI 0
Luiz Maia
03/02/2009
ERRATA,
"o mesmo pode ser burlado, caso o usuário troque a data..."
Att.
Luiz Maia
GOSTEI 0
Luiz Maia
03/02/2009
E ai Luiz, obteve sucesso?
Aguardo seu retorno.
Abraços
Luiz Maia
GOSTEI 0
Luiz Maia
03/02/2009
Olá Luiz,
Como não obtvemos resposta ou feedback do seu chamado, estamos concluindo o mesmo.
Continuamos a sua disposição.
Att,
Luiz Maia
GOSTEI 0
Luiz Franco
03/02/2009
O que não entendi mediante o exemplo que vc me passou é aonde nos métodos abaixo eu coloco os dados de data atual e data de expiração
public void VerificaValidade()
{
string valorParametroExpiracao;
bool DataExpirada;
if (Descriptografar(valorParametroExpiracao) == "valido")
{
// executa os metodos pertinentes
}
else
{
if (DataExpirada)
{
// sair da dll
}
else
{
if (DataExpiracao - 8)
{
// vc tem 8 dias até a expiração do componente NONON, adquira sua licença
}
// executa os metodos pertinentes
}
}
}
Teria como me exemplificar com datas e prazo de expiração pra eu entender melhor e você também fala de colocar na classe main foi outra coisa que não entendi e que a data poderia sêr alterada no host, mas no host não é só o Provedor que altera
Fico no aguardo e desde já agradeço e desculpe-me pela demora é que estava analizando o codigo
GOSTEI 0
Luiz Maia
03/02/2009
Olá Luiz,
Primeira coisa a fazer é, toda vez que vc for fazer uso de sua DLL, vc deve verificar a data de expiração, ou seja vc terá que chamar um método que funcionará como um filtro para uso da DLL, só assim vc poderá saber se sua DLL é válida ainda. (método abaixo VerificaValidade())
Depois vc deve ter outro metodo que valida a DLL, caso o usuário possua a chave, como no método abaixo VerificaChave, e alterar o arquivo onde vc guarda a data de expiração, caso o usuario entre com a chave correta.
Veja o esquema abaixo e faça as adequações para sua aplicação.
using System;
using System.Collections.Generic;
using System.Text;
namespace ClassLibrary1
{
public class Class1
{
public void VerificaValidade()
{
string valorParametroExpiracao = "06/03/2009"; // Aqui vc pega o valor de expiração, seja do arquivo, de registro ou de banco de dados
// Se o valorParametroExpiracao for uma data maior que hj, a DLL pode ser usada até a data
// Se o valorParametroExpiracao for uma data "31/12/2099" (por exemplo), a DLL já foi liberada com a chave informada corretamente
if (Convert.ToDateTime(Descriptografar(valorParametroExpiracao)) > DateTime.Now)
{
MetodoDaSuaDll();
}
else
{
DllExpirada();
}
}
public bool VerifivaChave(string key)
{
// aqui vc verifica se a chave que ele digitou bate com a que vc envio e valida a DLL, ou não
if (key == "3216576513268432") // exemplo de chave valida
{
// ja que a chave é valida, vc deve alterar o valor da valorParametroExpiracao no lugar que vc gravou (arquivo txt, registro ou banco de dados)
return (true);
}
else
{
// exibe uma mensagem falando que a chave está errada
// vc tb pode contar o nº de tentativas e bloquear depois de algumas tentativas erradas.
return (false);
}
}
public void MetodoDaSuaDll()
{
// aqui faz todo o processo que o DLL é responsavel
}
public void DllExpirada()
{
// Informe aqui ao usuário que a data da expiração da DLL foi excedida
// e ele deve adquirir a licença agora e depois vc abandona a DLL sem executar o metodos dela
}
}
}
Qualquer dúvida, me avise.
Estou aguardando.
Abraços
Luiz Maia
GOSTEI 0
Luiz Franco
03/02/2009
Olá Consultor LUIZ, boa tarde me desculpe pela demora em testar e responder da outra vêz, vou procurar me agilizar nas próximas... até aproveitando sugeriria que fosse criado um sistema de alerta via e-mail dizendo que o consultor respondeu nossa resposta
Bem vamos as minhas novas duvidas baseado no último código que você me passou
Bem no Componente abaixo alterei algumas situações (já que ainda não há um componente de encriptação e decriptação definido ele estava dando erro mas dentro dele tenho algumas duvidas baseada numa webapp de teste que fiz
Bem vamos a elas (não que não esteja funcionando desta vêz funcionou)
Em Relação áo Componente (perceba que alterei um pouco o codigo) e nos comentários coloquei algumas duvidas extras
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Web.UI;
using System.IO;
using MinhaEmpresa.Trial;
namespace MinhaEmpresa.Trial
{
public class Validacao
{
public void VerificaValidade()
{
string valorParametroExpiracao = "07/02/2009"; // Aqui vc pega o valor de expiração, seja do arquivo, de registro ou de banco de dados
// Se o valorParametroExpiracao for uma data maior que hj, a DLL pode ser usada até a data
// Se o valorParametroExpiracao for uma data "31/12/2099" (por exemplo), a DLL já foi liberada com a chave informada corretamente
// if (Convert.ToDateTime(Descriptografar(valorParametroExpiracao)) > DateTime.Now)//LuizAntonio R:Comentei pois diz que o parâmetro Descriptografar está fora do contexto tendo que só para testes usar a de baixo
if(Convert.ToDateTime(valorParametroExpiracao) > DateTime.Now)
{
MetodoDaSuaDll();//LuizAntonio R: Aqui seria o meu Método mas como recebo os dados qdo necessário nele usado na minha webapp por ex.MedodoDaSuaDll(Label IDLabel, string texto, int numero, bool verdadeirooufalso) já que na minha webapp só aparece o VerificaValidate (o que é perfeitamente correto só tem que aparecer ele mesmo acredito eu)
}
else
{
DllExpirada();
}
}
public bool VerifivaChave(string key)
{
// aqui vc verifica se a chave que ele digitou bate com a que vc envio e valida a DLL, ou não
if (key == "3216576513268432") // exemplo de chave valida
{
// ja que a chave é valida, vc deve alterar o valor da valorParametroExpiracao no lugar que vc gravou (arquivo txt, registro ou banco de dados)
//Como Altero o valorParametroExpiracao(já que no caso ele teria que sêr um valor data infinito caso a chave fosse válida, acredito eu e não "31/12/2099" ou se usar "99/99/9999" seria a mesma coisa?) teria um video auto explicativo como fz td esse processo tanto do componente
//como da WebApp em que meu componente com chave trial será utilizado
return (true);
}
else
{
// exibe uma mensagem falando que a chave está errada
HttpContext.Current.Response.Write("Chave Inválida - Por Favor entre com outra chave");
// vc tb pode contar o nº de tentativas e bloquear depois de algumas tentativas erradas. LuizAntonio - R:Como eu faria essa rotina de contar o numero de tentativas e existiria tb algum metodo ou rotina por exemplo qdo o usuário colocou a data para frente e voltou para tráz para bloqueá-lo tb?
return (false);
}
}
public void MetodoDaSuaDll()//LuizAntonio - R:Onde está MetodoDaSuaDll() substituo por meuMetodo(string dado, Label IDLabel, bool verdadeirooufalse), et....ou seja o metodo de minha aplicação e em VerificaValidade() sou obrigado á colher os mesmos dados do método embutido se sim como repasso esses dados ao metodo embutido MetodoDaSuaDLL(string dado, Label IDLabel, bool verdadeirooufalse) quando necessário?
{
// aqui faz todo o processo que o DLL é responsavel
string testachave = string.Empty;
if (HttpContext.Current != null)
{
testachave = HttpContext.Current.Request.UserHostAddress;
HttpContext.Current.Response.Write(testachave);
}
}
public void DllExpirada()
{
// Informe aqui ao usuário que a data da expiração da DLL foi excedida
// e ele deve adquirir a licença agora e depois vc abandona a DLL sem executar o metodos dela
HttpContext.Current.Response.Write("Sua Dll foi expirada por favor adquira a licença");
}
//E como eu faria neste que agora tá agindo certinho, Aquele metodo de quando faltar determinados dias para a minha webapp expirar
//Aparecer uma msg onde faltam X dias para sua DLL expirar por favor adquira ou renove a licença
//pelo site....
}
}
No caso de minha WEb App que está consumindo o componente coloquei desta forma
Default.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using MinhaEmpresa.Trial;
namespace Teste
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Validacao protecao = new Validacao();
protecao.VerificaValidade();
//LuizAntonio R:e Na aplicação para o componente
//no meu método como receber os dados
//Enfim será necessário eu colocar algum input de dados tipo chave ou algo assim
}
}
}
Se possivel no próximo post não poderia haver algum vídeo explicativo de como seria td esse processo destas minhas últimas dúvidas
Fico no aguardo e desde já agradeço
GOSTEI 0
Luiz Maia
03/02/2009
Olá Luiz,
Procurei alguma vídeo aula sobre o assunto no Acervo da Dev Media, mas não possui. Vou encaminhar a sugestão para o pessoal de Video aula.
Bom vou tentar responder cada dúvida de uma vez:
1 - Quanto a criptografia, eu coloquei um nome fictício de um método, você pode criar um ou pegar algum já existente na web.
2 - Vc so precisa do metodo que verifica a validade da DLL mesmo, caso ela seja valida, vc executa os outros metodos
3 - No caso da data de expiração quando a chave digitada for valida, pode usar 31/12/2099, serão mais 80 anos de uso... acho que é suficiente!!!! rsrsr E outra coisa, se vc usar 99/99/9999 quando converter para DataTime vai dar uma excessão.
4 - Para contar o numero de tentativas que o usuario entrou com a chave para liberação da DLL vc pode criar um ID para cada versão da DLL distribuída e associar uma chave para cada uma, assim vc compara a quantidade de tentativas para uma determinada chave no mesmo dia, esta informação pode ser guardada numa base de dados.
5 - Para evitar que o usuário burle a data, alterando a data do sistema, vc pode gravar tb a data de instalação da DLL, e a data de cada vez que o usuario fizer uso da DLL, assim vc consegue verificar se ele voltou a data do computador verificando se a data da ultima vez que ele usou a DLL é maior que a data atual do PC do usuário.
6 - Quanto a mensagem de "quase expirando", vc deve verificar a cada uso da DLL a data atual e a data de expiração, quando vc ver se estão faltando poucos dias para expirar, vc manda a mensagem para o usuario, mas lembrando que ele ainda deverá ter acesso, pois ainda não expirou.
7 - Para validar a DLL, vc debve fazer um metodo e mostrar para o usuario, tipo uma pagina de registro, onde o usuario entra, digita a chave, vc compara com a chave enviada para aquele determinado ID, e faz a validação.
Abraços
E continuo a disposição de vc.
Att
Luiz Maia
Luiz Maia
GOSTEI 0
Luiz Franco
03/02/2009
Olá LUIZ, nas quatro resposta abaixo se for possivel já que ainda não entendi direito, se possivel poderia me passar em anexo algum projeto exemplo pronto, até o video ficar pronto outra sugestão que passo pro time da CONSULTORIA, seria usar um programa de ACESSO REMOTO tipo o LOGMEIN-FREE para interação com os usuários da CONSULTORIA o link do Logmein-Free segue abaixo
https://secure.logmein.com/home.asp?lang=pt
Aqui as respostas no qual ainda estou em duvida como proceder baseado no que vc já me passou
4 - Para contar o numero de tentativas que o usuario entrou com a chave para liberação da DLL vc pode criar um ID para cada versão da DLL distribuída e associar uma chave para cada uma, assim vc compara a quantidade de tentativas para uma determinada chave no mesmo dia, esta informação pode ser guardada numa base de dados.
5 - Para evitar que o usuário burle a data, alterando a data do sistema, vc pode gravar tb a data de instalação da DLL, e a data de cada vez que o usuario fizer uso da DLL, assim vc consegue verificar se ele voltou a data do computador verificando se a data da ultima vez que ele usou a DLL é maior que a data atual do PC do usuário.
6 - Quanto a mensagem de "quase expirando", vc deve verificar a cada uso da DLL a data atual e a data de expiração, quando vc ver se estão faltando poucos dias para expirar, vc manda a mensagem para o usuario, mas lembrando que ele ainda deverá ter acesso, pois ainda não expirou.
7 - Para validar a DLL, vc debve fazer um metodo e mostrar para o usuario, tipo uma pagina de registro, onde o usuario entra, digita a chave, vc compara com a chave enviada para aquele determinado ID, e faz a validação.
GOSTEI 0
Luiz Maia
03/02/2009
Olá Luiz,
Me desculpe a demora na resposta, tive problemas com a provedor de internet e fiquei "desplugado" por uns dias.
Quanto as suas sugestões, de video aula e Loggme in, favor encaminhar para o setor responsável ou para o email:
editordevmedia@gmail.com (Rogério) Respostas Item 4:
Cada versão de DLL que vc criar terá um ID (identificador) armazenado em sua base de dados numa tabela que terão os campos:
ID int
Key char(20) NumTentativas int, por exemplo. Quando o usuário tentar entrar com a chave, vc compara o ID da DLL com o ID do banco, e acrescenta mais uma tentativa na coluna NumTentativas na base de dados. Item 5: Na mesma tabela acima, vc pode guardar a data de instalação da DLL, e sempre eastar verificando se a data atual é menor que a data de instalação, caso seja, o usuário está tentando burlar a data do sistema. Mas como vc terá uma aplicação WEB, hospedada num servidor, pode esquecer isto, pois servidores nunca alteram as datas do sistema. Item 6:
Na mesma tabela acima, vc pode tb guardar a data que a DLL vai expirar, e sempre que um metodo da DLL for invocado vc faz a verificação da data de expiração, caso esteja proximo ao vencimento, vc manda a mensagem para o usuário e continua o fluxo normalmente. Item 7:
Para que o usuário possa validar a DLL, vc deve fazer um botão em algum lugar do seu sistema, faça uma pagina we para isto, tipo assim "Valide o Componente Blablabla aqui", quando o usuário entrar na pagina, ele verá os campos para digitar a chave, e ja sera exibido para ele o ID da dll, de posse destas duas informações, basta vc comparar na tabela e ver se esta correta ou nao, e lembrando de sempre acrescentar mais um na contagem das tentativas. Segue uma sugestão para sua tabela de dados: ID int Key char(20) Tentativas int Data_instalacao Datatime Data_expiracap Datetime Nom_Cliente varchar(255) Dll_Expirada bool Dll_Validade bool Abraços Aguardo um retorno. Att Luiz Maia
editordevmedia@gmail.com (Rogério) Respostas Item 4:
Cada versão de DLL que vc criar terá um ID (identificador) armazenado em sua base de dados numa tabela que terão os campos:
ID int
Key char(20) NumTentativas int, por exemplo. Quando o usuário tentar entrar com a chave, vc compara o ID da DLL com o ID do banco, e acrescenta mais uma tentativa na coluna NumTentativas na base de dados. Item 5: Na mesma tabela acima, vc pode guardar a data de instalação da DLL, e sempre eastar verificando se a data atual é menor que a data de instalação, caso seja, o usuário está tentando burlar a data do sistema. Mas como vc terá uma aplicação WEB, hospedada num servidor, pode esquecer isto, pois servidores nunca alteram as datas do sistema. Item 6:
Na mesma tabela acima, vc pode tb guardar a data que a DLL vai expirar, e sempre que um metodo da DLL for invocado vc faz a verificação da data de expiração, caso esteja proximo ao vencimento, vc manda a mensagem para o usuário e continua o fluxo normalmente. Item 7:
Para que o usuário possa validar a DLL, vc deve fazer um botão em algum lugar do seu sistema, faça uma pagina we para isto, tipo assim "Valide o Componente Blablabla aqui", quando o usuário entrar na pagina, ele verá os campos para digitar a chave, e ja sera exibido para ele o ID da dll, de posse destas duas informações, basta vc comparar na tabela e ver se esta correta ou nao, e lembrando de sempre acrescentar mais um na contagem das tentativas. Segue uma sugestão para sua tabela de dados: ID int Key char(20) Tentativas int Data_instalacao Datatime Data_expiracap Datetime Nom_Cliente varchar(255) Dll_Expirada bool Dll_Validade bool Abraços Aguardo um retorno. Att Luiz Maia
GOSTEI 0
Luiz Franco
03/02/2009
No caso do ìtem 4
Item 4:
Cada versão de DLL que vc criar terá um ID (identificador) armazenado em sua base de dados numa tabela que terão os campos:
ID int
Key char(20) NumTentativas int, por exemplo. Aonde eu acho o ID da versão ou isso é um ID que eu criarei apenas na base de dados e ele tem que sêr relativo a que dado da DLL para eu comparar se fôr a versão aonde eu pego este dado na minha dll para comparar se for a chave é a chave que eu crio, enfim não teria um exemplo baseado no metodo já passado aonde eu embutiria ou colocaria esse metodo para me facilitar Fico no aguardo e desculpe pelo tempo e paciencia que lhe tomo e desde já agradeço
Cada versão de DLL que vc criar terá um ID (identificador) armazenado em sua base de dados numa tabela que terão os campos:
ID int
Key char(20) NumTentativas int, por exemplo. Aonde eu acho o ID da versão ou isso é um ID que eu criarei apenas na base de dados e ele tem que sêr relativo a que dado da DLL para eu comparar se fôr a versão aonde eu pego este dado na minha dll para comparar se for a chave é a chave que eu crio, enfim não teria um exemplo baseado no metodo já passado aonde eu embutiria ou colocaria esse metodo para me facilitar Fico no aguardo e desculpe pelo tempo e paciencia que lhe tomo e desde já agradeço
GOSTEI 0
Luiz Maia
03/02/2009
Olá Luiz, blz?
Você pode fazer de duas formas, pode criar uma constante para cada versão de compilação de sua DLL:
const string key = "lkhkl23423234";
Ou, criar uma chave dentro do arquivo AssemblyInfo.cs (recomendado), como no assembly version, veja abaixo:
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
E para recuperar vc deve usar o: using System.Reflection;
Abraços.
Att
Luiz Maia
GOSTEI 0
Luiz Franco
03/02/2009
E para recuperar vc deve usar o: using System.Reflection;
Olá LUIZ, bom dia, como faço essa recuperação teria algum exemplo de como eu fazer isso, já que é a primeira vêz que tento fz esse trial para web, fico no aguardo e desde já agradeço
GOSTEI 0
Luiz Maia
03/02/2009
E ai Luiz, tudo bom com vc?
Taí o código de recuperação dos parametros usados dentro do Arquivo AssemblyInfo.cs, desta forma vc recupera a versão, mas basta usar o Intellisense, que vc verá os outros métodos possíveis de recuperação:
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace ClassLibrary1
{
public class Class1
{
public string NomeChave()
{
return Assembly.GetAssembly(this.GetType()).GetName().Version.ToString();
}
}
}
Abraços
Att
Luiz Maia
GOSTEI 0
Luiz Maia
03/02/2009
Opa Luiz, tudo bom?
Resolveu seu problema? Aguardo seu retorno.
Abraços
Luiz Maia
GOSTEI 0
Luiz Maia
03/02/2009
Olá Luiz,
Como não obtivemos mais respostas quanto aos posts anteriores, estamos considerando o chamado concluído.
Não exite em nos contactar para qualquer dúvida, continuamos a sua disposição.
Abraços
Att,
Luiz Maia
GOSTEI 0
Luiz Franco
03/02/2009
Bem aqui mais algumas duvidas acredito eu que sejam as finais, sendo que também já resolvi o problema da data para exibir apenas a msg de aviso de expiração
Bem vamos as duvidas que ainda tô tentando entender, aluno iniciante é complicado rssss
2 - Vc so precisa do metodo que verifica a validade da DLL mesmo, caso ela seja valida, vc executa os outros métodos
public void VerificaValidade(string mydado)
Ok mas como as propriedades string mydado, ou alguma embutida no meu metodo
MetodoDaSuaDll();
poderiam aparecer no intelissense do VS2005 ou 2008, já que pelo void ele não aparece os tipos de dados de entrada no intelissense para o usuário ou isso seria inviável ?
4 - Para contar o numero de tentativas que o usuario entrou com a chave para liberação da DLL vc pode criar um ID para cada versão da DLL distribuída e associar uma chave para cada uma, assim vc compara a quantidade de tentativas para uma determinada chave no mesmo dia, esta informação pode ser guardada numa base de dados.
5 - Para evitar que o usuário burle a data, alterando a data do sistema, vc pode gravar tb a data de instalação da DLL, e a data de cada vez que o usuario fizer uso da DLL, assim vc consegue verificar se ele voltou a data do computador verificando se a data da ultima vez que ele usou a DLL é maior que a data atual do PC do usuário.
Apesar dos exemplos citados no caso das respostas dos itens 4 e 5, ácima deste se o componente web que irá ficar com o usuário, neste caso a base teria que ser em meu servidor de hospedagem (mas aí não haveria perigo de Trafego em meu servidor á cada tentativa de cada usuário ou usuários em meu site onde estiver minha base?) Se sim qual seria a alternativa para isto pois a base acredito eu neste caso da comparação não possa ir junto com a DLL ou se pode como seria
C)
Ou, criar uma chave dentro do arquivo AssemblyInfo.cs (recomendado), como no assembly version, veja abaixo:
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
Como eu crio a chave dentro do arquivo AssemblyInfo e como a recupero
Resolvi o problema do ítem 6
Item 6:
Na mesma tabela acima, vc pode tb guardar a data que a DLL vai expirar, e sempre que um metodo da DLL for invocado vc faz a verificação da data de expiração, caso esteja proximo ao vencimento, vc manda a mensagem para o usuário e continua o fluxo normalmente. Mas sem necessitar de tabela de base de dados sql ou mysql (usando-se apenas codigo e arquivos de texto) no caso a parte do codigo seria esse public void VerificaValidade(string mydado) { meudado = mydado; string valorParametroExpiracao = "17/02/2009"; // Aqui vc pega o valor de expiração, seja do arquivo, de registro ou de banco de dados //Dados para valor de Dias que faltam a expirar string valorParametroAvisoExpiracao = "16/02/2009";//Aqui vc pega o valor de aviso para expiração DateTime DTFinal = Convert.ToDateTime(valorParametroAvisoExpiracao); DateTime DTInicial = DateTime.Now; TimeSpan diff = DTFinal - DTInicial; string diasaviso = "2";//aqui você pega o valor de dias de mostragem do aviso da expiração //Final de Dados para valor de Dias que Faltam a expirar // Se o valorParametroExpiracao for uma data maior que hj, a DLL pode ser usada até a data // Se o valorParametroExpiracao for uma data "31/12/2099" (por exemplo), a DLL já foi liberada com a chave informada corretamente // if (Convert.ToDateTime(Descriptografar(valorParametroExpiracao)) > DateTime.Now) if(Convert.ToDateTime(valorParametroExpiracao) > DateTime.Now) { //Inicio da Rotina Para Exibição de msgs //baseados nos Parâmetros valorParametroAvisoExpiracao ácima //e diasaviso (Qtde de dias antes do Parametro valorParametroAvisoExpiracao //Que deve-se iniciar á mostragem das msgs que faltam dias para expirar if (Convert.ToInt32(diff.TotalDays) <= Convert.ToInt32(diasaviso)) { if (Convert.ToInt32(diff.TotalDays) == 0) { HttpContext.Current.Response.Write("Faltam algumas Horas para expirar sua licença!!!"); } if (Convert.ToInt32(diff.TotalDays) > 1) { HttpContext.Current.Response.Write("Faltam " + Convert.ToInt32(diff.TotalDays) + " dias para expirar sua licença!!!"); } if (Convert.ToInt32(diff.TotalDays) == 1) { HttpContext.Current.Response.Write("Falta " + Convert.ToInt32(diff.TotalDays) + " dia para expirar sua licença!!!"); } } //Fim da Rotina para Exibição de msgs MetodoDaSuaDll(); } else { DllExpirada(); } Que achou da implementação ficou legal? Bem fico no aguardo as minhas duvidas acredito que finais e desde já agradeço
Na mesma tabela acima, vc pode tb guardar a data que a DLL vai expirar, e sempre que um metodo da DLL for invocado vc faz a verificação da data de expiração, caso esteja proximo ao vencimento, vc manda a mensagem para o usuário e continua o fluxo normalmente. Mas sem necessitar de tabela de base de dados sql ou mysql (usando-se apenas codigo e arquivos de texto) no caso a parte do codigo seria esse public void VerificaValidade(string mydado) { meudado = mydado; string valorParametroExpiracao = "17/02/2009"; // Aqui vc pega o valor de expiração, seja do arquivo, de registro ou de banco de dados //Dados para valor de Dias que faltam a expirar string valorParametroAvisoExpiracao = "16/02/2009";//Aqui vc pega o valor de aviso para expiração DateTime DTFinal = Convert.ToDateTime(valorParametroAvisoExpiracao); DateTime DTInicial = DateTime.Now; TimeSpan diff = DTFinal - DTInicial; string diasaviso = "2";//aqui você pega o valor de dias de mostragem do aviso da expiração //Final de Dados para valor de Dias que Faltam a expirar // Se o valorParametroExpiracao for uma data maior que hj, a DLL pode ser usada até a data // Se o valorParametroExpiracao for uma data "31/12/2099" (por exemplo), a DLL já foi liberada com a chave informada corretamente // if (Convert.ToDateTime(Descriptografar(valorParametroExpiracao)) > DateTime.Now) if(Convert.ToDateTime(valorParametroExpiracao) > DateTime.Now) { //Inicio da Rotina Para Exibição de msgs //baseados nos Parâmetros valorParametroAvisoExpiracao ácima //e diasaviso (Qtde de dias antes do Parametro valorParametroAvisoExpiracao //Que deve-se iniciar á mostragem das msgs que faltam dias para expirar if (Convert.ToInt32(diff.TotalDays) <= Convert.ToInt32(diasaviso)) { if (Convert.ToInt32(diff.TotalDays) == 0) { HttpContext.Current.Response.Write("Faltam algumas Horas para expirar sua licença!!!"); } if (Convert.ToInt32(diff.TotalDays) > 1) { HttpContext.Current.Response.Write("Faltam " + Convert.ToInt32(diff.TotalDays) + " dias para expirar sua licença!!!"); } if (Convert.ToInt32(diff.TotalDays) == 1) { HttpContext.Current.Response.Write("Falta " + Convert.ToInt32(diff.TotalDays) + " dia para expirar sua licença!!!"); } } //Fim da Rotina para Exibição de msgs MetodoDaSuaDll(); } else { DllExpirada(); } Que achou da implementação ficou legal? Bem fico no aguardo as minhas duvidas acredito que finais e desde já agradeço
GOSTEI 0
Luiz Maia
03/02/2009
Olá LUiz,
Primeiramente, não entendi sua dúvida quanto ao Intelicense, por favor explique melhor.
Quanto ao tráfego de informação, não se preocupe, é totalmente seguro. A base deve ficar no seu servidor, sendo assim, sem problemas.
No mais, ficou bom.. depois vc vai aprimorando sua DLL.
Abraços e aguardo seu retorno.
Att
Luiz Maia
GOSTEI 0
Luiz Maia
03/02/2009
Luiz,
Ainda aguardo sua dúvida quanto ao uso do Intellicense.
Estou no aguardo........
Abraços
Att
Luiz Maia
GOSTEI 0
Luiz Franco
03/02/2009
Olá LUiz,
Primeiramente, não entendi sua dúvida quanto ao Intelicense, por favor explique melhor.
Duvida:O que eu quis dizer seria mais ou menos o seguinte
qdo normalmente se cria um metodo public void por exemplo se cria
public void exemplo(string dado1, string dado2) Correto
No caso da pagina que consome A Class ou Componente
por exemplo
meumetodo variavel = new metodo(0;
variavel.exemplo(dado1,dado2) Só que se mostra o intelissense a medida que vc coloca os dados dentro dos parenteses
Mas no caso do componente trial que vc me exemplificou até pq acredito que isso seja uma maneira de proteção, pois eu já testei
public void VerificaValidade(string mydado)
no caso esse mydado vou tentar colocar em meu metodo que está embutido dentro do metodo
//Fim da Rotina para Exibição de msgs
MetodoDaSuaDll();
e na pagina que consome o mesmo desta forma
protected void Page_Load(object sender, EventArgs e)
{
Validacao protecao = new Validacao();
protecao.VerificaValidade("texto"); //Só que aí eu percebi que na hora que eu abri o parenteses em modo design e fui colocar a string, não apareceu, apesar de assim mesmo funcionar normalmente, não apareceu o intelissense do VS mostrando string mydado, ou seja uma info para o usuario apesar de ter funcionado corretamente apesar da invisibilidade rssss
}
Acredito que pela lógica, vamos vêr se eu estou correto em minha logica do processo da dll trial eu tenha que fazer assim
A)Crio um componente ou uma class library
A.1)Crio uma classe que será responsável por todos os metodos de meu componente como tb dos metodos triais como o verificavalidade(string mydado)
A.2)Crio a class principal que seria livre com um metodo tipo assim
public void Teste(string texte) //para que o intelissense o reconheça e o passe para o metodo com dados no que eu chamaria agora de dados invisiveis mas funcionais
{
VerificaValidade(string mydado)//Fazendo ele executar todo o metodo trial com os dados de entrada
}
Estou certo em minha lógica?
Quanto ao tráfego de informação, não se preocupe, é totalmente seguro. A base deve ficar no seu servidor, sendo assim, sem problemas.
Duvida - O que eu quis dizer em trafego de informação seria tipo assim muitos usuários que teriam o mesmo ou outro tipo de componente mas que usa-se a mesma base usando o mesmo ao mesmo tempo !!!Então com isso não tenho que me preocupar pq eu sei que dependendo do numero de usuários acessando ao mesmo tempo as vezes as paginas ficam fora do ar ou causam exceções?
No mais, ficou bom.. depois vc vai aprimorando sua DLL.
Duvida - no caso o teste dos dias de expiração para mostragem de msgs está correto?
public void VerificaValidade(string mydado)
{
meudado = mydado;
string valorParametroExpiracao = "17/02/2009"; // Aqui vc pega o valor de expiração, seja do arquivo, de registro ou de banco de dados
//Dados para valor de Dias que faltam a expirar
string valorParametroAvisoExpiracao = "17/02/2009";//Aqui vc pega o valor de aviso para expiração
DateTime DTFinal = Convert.ToDateTime(valorParametroAvisoExpiracao);
DateTime DTInicial = DateTime.Now;
TimeSpan diff = DTFinal - DTInicial;
string diasaviso = "3";//aqui você pega o valor de dias de mostragem do aviso da expiração
//Final de Dados para valor de Dias que Faltam a expirar
// Se o valorParametroExpiracao for uma data maior que hj, a DLL pode ser usada até a data
// Se o valorParametroExpiracao for uma data "31/12/2099" (por exemplo), a DLL já foi liberada com a chave informada corretamente
// if (Convert.ToDateTime(Descriptografar(valorParametroExpiracao)) > DateTime.Now)
if(Convert.ToDateTime(valorParametroExpiracao) > DateTime.Now)
{
//Inicio da Rotina Para Exibição de msgs
//baseados nos Parâmetros valorParametroAvisoExpiracao ácima
//e diasaviso (Qtde de dias antes do Parametro valorParametroAvisoExpiracao
//Que deve-se iniciar á mostragem das msgs que faltam dias para expirar
if (Convert.ToInt32(diff.TotalDays) <= Convert.ToInt32(diasaviso))
{
if (Convert.ToInt32(diff.TotalDays) == 0)
{
HttpContext.Current.Response.Write("Faltam algumas Horas para expirar sua licença!!!");
}
if (Convert.ToInt32(diff.TotalDays) > 1)
{
HttpContext.Current.Response.Write("Faltam " + Convert.ToInt32(diff.TotalDays) + " dias para expirar sua licença!!!");
}
if (Convert.ToInt32(diff.TotalDays) == 1)
{
HttpContext.Current.Response.Write("Falta " + Convert.ToInt32(diff.TotalDays) + " dia para expirar sua licença!!!");
}
}
//Fim da Rotina para Exibição de msgs
MetodoDaSuaDll();
}
else
{
DllExpirada();
}
}
O que eu quis dizer é em número de dias de aviso
string diasaviso = "3";//aqui você pega o valor de dias de mostragem do aviso da expiração
não dá algum tipo de variação? Se dêr pq estranhamente testei com dias de aviso 2 e dps que mudou para uma outra data tive que acrescentar o 3 e mudar as datas de cima não testei novamente mas agora estaria correto?
Fico no aguardo e desde já agradeço
GOSTEI 0
Luiz Maia
03/02/2009
Olá Luiz,
1 - //Só que aí eu percebi que na hora que eu abri o parenteses em modo design e fui colocar a string, não apareceu, apesar de assim mesmo funcionar normalmente, não apareceu o intelissense do VS mostrando string mydado, ou seja uma info para o usuario apesar de ter funcionado corretamente apesar da invisibilidade
Consideração:
Código não se abre em Modo Design, é impossível! Qualquer arquivo .cs é em modo de Source. E sempre tem que aparecer o tipo de dado no Intelicense, se não está aparecendo, seu VS pode estar com problema, ou sua DLL, recompile e teste novamente, mas com certeza tem algum problema.
2 - public void Teste(string texte) //para que o intelissense o reconheça e o passe para o metodo com dados no que eu chamaria agora de dados invisiveis mas funcionais
Consideração:
Repare que o nome de sua string "texte" está verde, portanto é uma palavra reservada do VS, experimente trocar este nome. Ai terá que aparecer no Intelicense.
3 - Duvida - O que eu quis dizer em trafego de informação seria tipo assim muitos usuários que teriam o mesmo ou outro tipo de componente mas que usa-se a mesma base usando o mesmo ao mesmo tempo !!!Então com isso não tenho que me preocupar pq eu sei que dependendo do numero de usuários acessando ao mesmo tempo as vezes as paginas ficam fora do ar ou causam exceções?
Consideração:
Exceções são erros de runtime, de codificação, não tem nada a ver com quantidade de usuários acessando a base.
Página fora do ar tb. No IIS vc tem um pool de conexão que controla estes acessos, não se preocupe com isto. Veja um comercio eletronico, por exemplo, onde milhoes de acessos são feitos simultaneamente.
4 - Duvida - no caso o teste dos dias de expiração para mostragem de msgs está correto?
Consideração:
Isto mesmo, é a data final menos a data inicial, ai vc sabe o numero de dias faltantes para que a DLL expire.
5 - não dá algum tipo de variação? Se dêr pq estranhamente testei com dias de aviso 2 e dps que mudou para uma outra data tive que acrescentar o 3 e mudar as datas de cima não testei novamente mas agora estaria correto?
Consideração:
Usando TimeSpan pode dar uma variação quanto as horas, pq as vezes faltam 48 horas para expiração, o TimeSpan assume que faltam 2 dias, mas de faltam 47 horas para a expiração, o que para nós são dois dias, para o TimeSpan, é apenas um dia.
Abraços
Att
Luiz Maia
GOSTEI 0
Luiz Franco
03/02/2009
Luiz escreveu
Consideração:
Usando TimeSpan pode dar uma variação quanto as horas, pq as vezes faltam 48 horas para expiração, o TimeSpan assume que faltam 2 dias, mas de faltam 47 horas para a expiração, o que para nós são dois dias, para o TimeSpan, é apenas um dia.
Duvida:Teria alguma forma de corrigir isto ou seja (47 horas para a expiração, o que para nós são dois dias, para o TimeSpan, é apenas um dia.)
Fico no aguardo e desde já agradeço
GOSTEI 0
Luiz Maia
03/02/2009
Luiz tem sim.
Mas como isto foge do contexto de seu chamado, devemos concluir este a abrir um outro com o Tema TimeSpan.
Aguardo vc.
Abraços
Luiz Maia
GOSTEI 0
Luiz Maia
03/02/2009
Luiz,
Estamos concluindo o chamado. Lembrando que continuamos a sua disposição para qualquer dúvida.
Abraços
Luiz Maia
GOSTEI 0
Luiz Franco
03/02/2009
Bem só mais uma última duvida sobre o assunto á nivel de arquitetura já que vou precisar comparar datas o que seria melhor em nivel de arquiteturar
A)A Classe que estou criando do meu componente trial web - têr dentro do código dela uma conexão com base de dados seja ela mysql ou sqlserver do qual proveriam os dados como a chave e as datas de expiração
B)Usar o PODERIO DO WEBSERVICE para consumir tais dados do vencimento mediante o id do produto ( e se fôr esta a melhor opção como é que dentro da classe eu faria a requisição pelo ID do produto do meu webservice criado, para recuperar tais dados como ID, chave de comparação etc)
Fico no aguardo e desde já agradeço
GOSTEI 0
Luiz Maia
03/02/2009
O Web Service com certeza é a melhor opção.
Basta notar que sempre que nossa maquina pede alguma atualização de software ele pergunta se estamos conectados a Internet, pois faz uso de serviço Web para o download.
No seu caso, pode fazer mesma coisa.
Chegando perto da data de expiração, vc manda a msg para o cliente que ao clicar num botao de atualizar versao, é invocado o WS que faz todo o processo
Qualquer duvida, só me falar.
Abraços
Att
Luiz Maia
GOSTEI 0
Luiz Franco
03/02/2009
Ok então o webservice é a melhor opção mas já que vc falou de enviar a msg de expiração ou dados baseado no id do produto ou dados do usuario via webservice, teria algum exemplo de como seria essa requisição de atualização de download ou recuperação de dados baseado no id do produto e nome do usuario como vc me passou fico no aguardo e desde já agradeço
GOSTEI 0
Luiz Maia
03/02/2009
Ola Luiz,
O que vc deve fazer é disponibilizar um recurso Web para os usuarios de seu sistema realizarem a autenticaçao da DLL e com isto vc valida os dados e libera o uso da mesma. Vou pesquisar sobre um exemplo pra vc, pois não tenho no momento.
Assim que tiver alguma novidade te envio, e me avise sobre qualquer avanço, ok?
Estou aguardando
Att
Luiz Maia
GOSTEI 0
Luiz Franco
03/02/2009
Ok lhe aviso assim que tiver uma solução mas a dica do webservice irei pesquisar aqui tb algo que tb me atenda fico no aguardo então do seu exemplo e desde já agradeço
GOSTEI 0
Luiz Maia
03/02/2009
Ola Luiz,
Tive pesquisando a respeito deste tipo de autenticação que quer fazer.
O que encontrei é o seguinte:
Vc tera que construir um Web Service que fara primeiro a autenticação do usuario, e depois libera para ele o Download da DLL.
Um passo a passo seria mais ou menos assim:
Usuario loga no sistema.
Sistema exibe mensagem dizendo que a DLL vai expirar e pergunta se deseja autenticar ou baixar atualização da mesma.
Caso responda sim, o usuario é redirecionado para uma pagina de Updates onde tera um botao e um mensagem dizendo que sera necessario conexão com Internet.
Usuario clica no Botao Update DLL.
Vc invoca o Web Service, onde o usuario tem que colocar a chave da DLL dele, no caso vc pode exibi-la na pagina de Update.
Assim que ele colocar a chave e se autenticar via login e senha, vc vai na base de dados e faz as validações pertinentes.
Caso ele ja tenha pago ou tenha direito a nova verssão da DDL, vc libera um link para que ele clique e baixe a mesma, substituindo a antiga, e liberando todos os recursos.
Entendeu o processo? Pois não tenho um exemplo pratico, pois todos os WS são de codigo fechasos.
Aguardo um retorno.
Att
Luiz Maia
GOSTEI 0
Luiz Franco
03/02/2009
Pelo que entendi seria mais ou menos isso
Um passo a passo seria mais ou menos assim:
Usuario loga no sistema. (meu cliente após cadastro se loga na pagina p/ baixar a dll trial)
Sistema exibe mensagem dizendo que a DLL vai expirar e pergunta se deseja autenticar ou baixar atualização da mesma. (isto acontece no componente nos eventos de data de aviso de expiração como já repassado via codigo do exemplo abaixo)
Caso responda sim, o usuario é redirecionado para uma pagina de Updates onde tera um botao e um mensagem dizendo que sera necessario conexão com Internet. (neste caso ele já estara conectado já que o meu é um componente trial para websites)
Usuario clica no Botao Update DLL. (ou botão comprar dll no site)
Vc invoca o Web Service, onde o usuario tem que colocar a chave da DLL dele, no caso vc pode exibi-la na pagina de Update.
Assim que ele colocar a chave e se autenticar via login e senha, vc vai na base de dados e faz as validações pertinentes.
Caso ele ja tenha pago ou tenha direito a nova verssão da DDL, vc libera um link para que ele clique e baixe a mesma, substituindo a antiga, e liberando todos os recursos. (no caso a antiga seria as datas de vencimento via licenças.txt ou via conexão com o webservice os dados estariam no webservice?)
Enfim eu sei que vc não tem um exemplo pronto mas teria algum artigo ou link no qual teria um exemplo de invocação com autenticação do webservice baseado em membershipprovider ou algum codigo deste webservice de exemplo que invocaria a autenticação e a chave?
Fico no aguardo e desde já agradeço
GOSTEI 0
Luiz Maia
03/02/2009
Ola,
Não tenho exemplo pronto, mas aqui tem algumas referencias sobre membership:
https://www.devmedia.com.br/articles/listcomp.asp?txtsearch=membershipprovider+&sa=Busca
Caso não tenha acesso a algum artigo ou video acima, me avise que providencio para vc ok?
Mas, o que vc precisa é quando eu disse autenticação, é simplesmente conferir os dados da chaves em sua base e liberar um link. Se vc seguir este mesmo passo a passo do post abaixo dá pra vc fazer o recurso sem problemas.
So faça um teste antes em sua maquina substituindo as DLLs trial pela DLL permanente, veja se não gera inconsistencia nenhuma.
Aguardo um retorno.
Abraços
Att
Luiz Maia
GOSTEI 0
Luiz Maia
03/02/2009
Prezados,
Como não obtivemos retorno ao seu chamado, estamos executando a fechamento do mesmo. Salientando que continuamos a sua disposição para qualquer tipo de dúvida.
Abraços
Att
Luiz Maia
GOSTEI 0