尝试观看已完成的事件时访问被拒绝。

3

我们目前使用的是RightFax v9.3.2.89和rfcomlib API。目前,我们只是将RightFax安装在每个人的电脑上,因为生成这些传真的应用程序在桌面上。由于我们正在转向Web解决方案,所以我们将只在服务器上安装RightFax。这个问题是用户将无法看到是否成功发送了传真。查看API,我发现可以这样做:

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

问题在于当我订阅观察完成事件时,我收到的是
Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

我浏览网页时发现这个错误可能来自无数的来源。很奇怪,因为我在电脑上拥有管理员权限。

有什么想法吗?

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


1
这看起来像是DCOM配置错误。我的主要建议是每5-10秒轮询状态,而不是订阅事件,因为在面对不稳定的网络时更加健壮。 - Ben
哇,这简单多了。我只需通过句柄获取传真并查看“StatusDescription”即可。如果您将评论发布为答案,我将非常感激。谢谢。 - Nosila
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没有文档并且难以使用。希望这能对原帖作者有所帮助。


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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接