Доступ запрещен при попытке просмотра завершенных событий - PullRequest
3 голосов
/ 14 марта 2012

В настоящее время мы используем RightFax v9.3.2.89 с API rfcomlib. В настоящее время мы просто установили RightFax на компьютер каждого пользователя, поскольку приложение, создающее эти факсы, находится на рабочем столе. Поскольку мы переходим к веб-решению, мы будем устанавливать только RightFax на сервер. Проблема заключается в том, что пользователи не смогут увидеть, успешно ли отправлены факсы. Глядя на API, я вижу, что я могу сделать что-то вроде этого:

faxServer.Events.WatchCompleteEvents = BoolType.True;
faxServer.OnCompleteEvent += faxServer_OnCompleteEvent;

Проблема в том, что когда я подписываюсь на просмотр завершенных событий, я получаю

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

Просматривая веб-страницы, я вижу, что эта ошибка может возникнуть из миллиона источников. Это странно, потому что у меня есть права администратора на моем компьютере.

Есть идеи?

К сожалению, сайт RightFax бесполезен и ресурсов практически нет.

Ответы [ 2 ]

3 голосов
/ 16 марта 2012

Я заметил, что при использовании вышеуказанного метода от Бена описание статуса никогда не обновляется. Приведенный ниже пример будет бездействующим, показывая состояние «Ожидание преобразования», даже если в FaxUtil факс был явно отправлен и имеет состояние «ОК».

fax.Send();

while (fax.StatusDescription != "OK")
{
    Console.WriteLine("Polling fax handle " + fax.Handle.ToString() 
                   + " for status. Found: " + fax.StatusDescription);
    Thread.Sleep(5000);
}

Второе, что RightFax API не имеет документации и с ней сложно работать. Надеюсь, это поможет оригинальному постеру.

0 голосов
/ 03 ноября 2015

Опрос по факсу. StatusDescription поместит программу в бесконечный цикл. Что вам нужно сделать, это повторно опросить объект факса. В следующем примере захватываются все объекты факса в определенной папке, указывается один нужный вам объект факса и запрашивается объект StatusDescription.

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
}
...