2012-03-14 6 views
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サイトは役に立たず、利用可能なリソースはほとんどありません。

+1

これはDCOM構成エラーのようです。 私の主な提案は、イベントに登録するのではなく、5〜10秒ごとにステータスをポーリングすることです。なぜなら、それは悪質なネットワークに直面してより堅牢になるからです。 – Ben

+0

Woah。それはずっと簡単です。私は、そのハンドルによって送信されたファックスをフェッチし、 'StatusDescription'が何であるかを見ることができます。あなたが答えとしてあなたのコメントを投稿すれば、私はそれを喜んで受け入れます。ありがとうございました。 – Nosila

答えて

3

上記のBenの方法を使用すると、ステータスの説明が更新されないことに気付きました。 FaxUtilでファックスが明確に送信され、ステータスが「OK」であっても、以下の例では「Waiting for Conversion」のステータスが永久にスリープします。

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のポーリングはプログラムを無限ループにします。あなたがする必要があることは、問題のFAXオブジェクトを繰り返しポーリングすることです。次の例では、特定のフォルダ内のすべてのFAXオブジェクトを取得し、必要なFAXオブジェクトを特定し、そのオブジェクトの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 
} 
関連する問題