3

我们目前正在使用带有 rfcomlib API 的 RightFax v9.3.2.89。目前,我们只是在每个人的计算机上安装了 RightFax,因为生成这些传真的应用程序在桌面上。由于我们正在转向 Web 解决方案,我们将只在服务器上安装 RightFax。问题是用户将无法查看传真是否成功发送。查看 API,我发现我可以执行以下操作:

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

问题是,当我订阅观看已完成的事件时,我得到

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

浏览网页我可以看到这个错误可能来自一百万个来源。这很奇怪,因为我对我的计算机拥有管理权限。

有任何想法吗?

不幸的是,RightFax 网站毫无用处,而且几乎没有可用资源。

4

2 回答 2

3

我注意到当使用 Ben 的上述方法时,状态描述永远不会更新。下面的示例将永远休眠,显示状态为“等待转换”,即使在 FaxUtil 中传真已明确发送并且状态为“OK”。

fax.Send();

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

我第二点是 RightFax API 没有文档并且很难使用。我希望这对原始海报有所帮助。

于 2012-03-15T23:34:53.033 回答
0

轮询fax.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
}
于 2015-11-03T15:00:35.550 回答