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.

Foi útil?

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
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top