Acesso negado ao tentar assistir a eventos concluídos
-
13-12-2019 - |
Pergunta
Atualmente estamos usando RightFax v9.3.2.89 com a API rfcomlib.Atualmente, simplesmente instalamos o RightFax nos computadores de todos, pois o aplicativo que gera esses faxes está na área de trabalho.Como estamos migrando para uma solução web, instalaremos apenas o RightFax no servidor.O problema é que os usuários não conseguirão ver se os faxes foram enviados com sucesso.Olhando para a API vejo que posso fazer algo assim:
faxServer.Events.WatchCompleteEvents = BoolType.True;
faxServer.OnCompleteEvent += faxServer_OnCompleteEvent;
O problema é que quando me inscrevo para assistir aos eventos concluídos, recebo
Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
Navegando na web, vejo que esse erro pode surgir de um milhão de fontes.É estranho porque tenho direitos administrativos no meu computador.
Alguma ideia?
Infelizmente, o site RightFax é inútil e há poucos ou nenhum recurso disponível.
Solução
Percebi que ao usar o método acima de Ben, a descrição do status nunca é atualizada.O exemplo abaixo ficará suspenso para sempre, mostrando o status "Aguardando conversão", embora no FaxUtil o fax tenha sido enviado claramente e tenha o status "OK".
fax.Send();
while (fax.StatusDescription != "OK")
{
Console.WriteLine("Polling fax handle " + fax.Handle.ToString()
+ " for status. Found: " + fax.StatusDescription);
Thread.Sleep(5000);
}
Afirmo que a API RightFax não tem documentação e é difícil de trabalhar.Espero que isso ajude o postador original.
Outras dicas
A pesquisa de fax.StatusDescription colocaria o programa em um loop infinito.O que você precisa fazer é pesquisar repetidamente o objeto de fax em questão.O exemplo a seguir captura todos os objetos de fax em uma pasta específica, identifica o objeto de fax necessário e consulta o StatusDescription do objeto.
string status = "";
string description = "";
int handle = fax.Handle; // this identifies the fax object you're polling for
while (status != "fsDoneOK") // keep polling fax object until status is "OK"
{
foreach (Fax obj_fax in obj_user.Folders["Main"].Faxes) // look in the "Main" folder for fax objects
{
if (handle == obj_fax.Handle) // check to see if this object is yours
{
status = obj_fax.FaxStatus.ToString();
description = obj_fax.StatusDescription;
System.Diagnostics.Debug.WriteLine("Fax Status: " + obj_fax.StatusDescription);
}
if (status == "fsDoneError" || status == "fsError") // check for fax error
break;
}
if (status == "fsDoneError" || status == "fsError") // check for fax error
break;
Thread.Sleep(3000); // sleep for 3 seconds and then poll again
}