2011-06-23 113 views
1

COMライブラリFaxComLib(参照の追加 - > COMタブ - > faxcom 1.0タイプライブラリ)からFAXを送信できます。FaxComLib FaxJobキューステータスが常に「保留中」

私の問題は、私がファックスを送信できる間、ファックスキューから正確なステータスを返すことができないことです。 FaxJobオブジェクトのQueueStatusプロパティは、常に「保留中」を返します。

環境:Windows 2003のR2のEnterprise SP2 /ワット - も同じ結果でのWindows 2008 R2上で

を試してみましたが、ここに私のプロトタイプのコードがあります:

public void GetFaxStatus(int queueNum) 
    { 
     FaxServer faxServer = new FaxServer(); 
     faxServer.Connect("myfaxservername"); 
     bool isInQueue = false; 

     FaxJobs faxJobs = (FaxJobs)faxServer.GetJobs(); 

     for (int i = 1; i <= faxJobs.Count; i++) 
     { 
      FaxJob j = (FaxJob)faxJobs.Item[i]; 
      MessageBox.Show(faxJobs.Item[i].GetType().ToString() + "\r\n" + CreateStatus(j)); 

      if (j.JobId == queueNum) 
      { 
       MessageBox.Show("Found Job:\r\n" + CreateStatus(j)); 
       isInQueue = true; 
      } 

     } 

     if (isInQueue == false) 
     { 
      MessageBox.Show("Fax is no longer in queue.(...or does not exist)"); 
     } 

     faxServer.Disconnect(); 
    } 

    static string CreateStatus(FaxJob job) 
    { 
     StringBuilder sb = new StringBuilder(); 

     sb.AppendLine(string.Format("Billing Code: {0}", job.BillingCode)); 
     sb.AppendLine(string.Format("Device Status: {0}\r\n", job.DeviceStatus)); 
     sb.AppendLine(string.Format("Queue Status: {0}", job.QueueStatus)); 
     sb.AppendLine(string.Format("Display Name: {0}", job.DisplayName)); 
     sb.AppendLine(string.Format("Fax Number: {0}", job.FaxNumber)); 
     sb.AppendLine(string.Format("Job Id: {0}", job.JobId)); 
     sb.AppendLine(string.Format("Tsid: {0}", job.Tsid)); 
     sb.AppendLine(string.Format("Type: {0}", job.Type)); 
     sb.AppendLine(string.Format("Page Count: {0}", job.PageCount)); 

     return sb.ToString(); 
    } 

私は仕事のためにそれを実行します失敗した(制限を超えたリトライ)、私はこの取得:

This result is always returned, no matter what the true status of the job is.私が今までどんなファックスジョブのために得る唯一のステータスです

。任意のステータスで。私は何か間違っているのですか? FAXサーバーを間違って設定しましたか?あなたは私のために私の問題にどのような光を当てることができますか?

ありがとうございました。 -Jason

+0

これは、間違いなくFAXサービスプロバイダの問題です。サポートについては、製造元に問い合わせてください。 –

+0

私たちは、ローカルのFAXモデムと組み込みのWindows FAXサービスを使用しています。実際に設定可能な設定はあまり多くありません。私はどのメーカーに向かうべきかわかりません。ここには第三者が関与していません。 –

+0

FaxJobsで列挙する方法を示す 'forループ'は私を救った! MSFTのドキュメントsux btw。 – Flea

答えて

0

私は相当なものを考え出すことができませんでしたが、少し進展しました。ステータスをチェックする前にFaxJob.Refresh()を呼び出すと、少し良い結果が得られます。ほとんどの場合、あなたはまだ役に立たないステータス(私の場合は「不明」)を取得しているようですが、少なくとも「保留中」とは限りません。 これは、ファックスが失敗した場合は「再試行再試行」ステータスを返します。それ以外の場合は、「不明」ステータスのみ取得できます。

ここではいくつかのサンプルコードです:

 if (j.JobId == queueNum) 
     { 
      MessageBox.Show("Found Job:\r\n" + CreateStatus(j)); 
      j.Refresh(); 
      isInQueue = true; 
     } 
2

私はファックス状況を最も強力であることが判明何が代わりの「Microsoft FAXサービス拡張COMタイプ」ライブラリを使用することです。 COMライブラリへの参照を追加した後、FAXサーバーで起こっていることを詳細に示すステータスイベントを待機することができます。

私は、聞き取りに重要なイベントを登録するFaxServerListenerクラスを作成しました。イベントの1つには、適切なステータスプロパティを含むFaxJobStatusオブジェクトが含まれています。

ここでは、OnOutgoingJobChangedイベントに登録してから聞くことができます。

// ... 
using FAXCOMEXLib; 

public class FaxServerListener 
{ 
    private FaxServer faxServer; 

    public FaxServerListener(string faxServerMachineName) 
    { 
     faxServer = new FaxServer(); 
     faxServer.Connect(faxServerMachineName); 
     RegisterFaxServerEvents(); 
    } 

    private void RegisterFaxServerEvents() 
    { 
     // subscribe to multiple FaxServer events here ... 
     faxServer.OnOutgoingJobChanged += faxServer_OnOutgoingJobChanged; 

     /* very important, you MUST tell the FaxServer object which events you're 
     * listening for, otherwise the events will never raise! 
     * This is what I have set and you should only need one of the event types 
     * to listen for but I didn't research this for your problem 
     */ 
     var events = FAX_SERVER_EVENTS_TYPE_ENUM.fsetACTIVITY | 
        FAX_SERVER_EVENTS_TYPE_ENUM.fsetDEVICE_STATUS | 
        FAX_SERVER_EVENTS_TYPE_ENUM.fsetOUT_ARCHIVE | 
        FAX_SERVER_EVENTS_TYPE_ENUM.fsetOUT_QUEUE; 

     faxServer.ListenToServerEvents(events); 
    } 

    private void faxServer_OnOutgoingJobChanged(FaxServer faxServer, string jobId, 
     FaxJobStatus jobStatus) 
    { 
     // Of course you can do whatever you wish here. This is the method that 
     // subscribes to the event with a JobStatus object 
     string output = string.Format("Outgoing Job Changed -> {0}{1}{2}", 
      jobId, Environment.NewLine, GetJobStatusOutput(jobStatus)); 

     // you could process the FaxJobStatus object how ever you wish here 
     // I raised another event from this listener class with the output data 
     // for other client code to listen to. 
    } 

    private string GetJobStatusOutput(FaxJobStatus jobStatus) 
    { 
     StringBuilder sb = new StringBuilder(); 

     sb.AppendLine("\tDeviceID: " + jobStatus.DeviceId.ToString()); 
     sb.AppendLine("\tCurrent Page: " + jobStatus.CurrentPage.ToString()); 
     sb.AppendLine("\tExt. Status Code: " + jobStatus.ExtendedStatusCode.ToString()); 
     sb.AppendLine("\tExt. Status: " + jobStatus.ExtendedStatus); 
     sb.AppendLine("\tJob Type: " + jobStatus.JobType.ToString()); 
     sb.AppendLine("\tRetries: " + jobStatus.Retries.ToString()); 
     sb.AppendLine("\tSize: " + jobStatus.Size.ToString()); 
     sb.AppendLine("\tStatus: " + jobStatus.Status.ToString()); 
     sb.AppendLine("\tStart: " + jobStatus.TransmissionStart.ToShortTimeString()); 

     if (jobStatus.ExtendedStatusCode != FAX_JOB_EXTENDED_STATUS_ENUM.fjesTRANSMITTING) 
     { 
      sb.AppendLine("\tStop: " + jobStatus.TransmissionEnd.ToShortTimeString()); 
     } 

     sb.AppendLine("\tTSID: " + jobStatus.TSID); 

     return sb.ToString(); 
    } 

} 

あなたは、それはまだあなたが言及したが、より良い状態がExtendedStatusCode列挙値が設けられており、保留中のファックスのステータスのショー見ることができるようにこれは、このコード

Outgoing Job Changed -> 201cce11ee0903f 
    DeviceID: 65538 
    Current Page: 1 
    Ext. Status Code: fjesCALL_COMPLETED 
    Ext. Status: 
    Job Type: fjtSEND 
    Retries: 0 
    Size: 10841 
    Status: fjsINPROGRESS 
    Start: 3:20 PM 
    Stop: 3:21 PM 
    TSID: Fax 

ためのいくつかの出力例です。

各拡張ステータスコードに関する詳細なステータス情報は、hereを参照しています。

+0

優れた答え。ご協力いただきありがとうございます! –

関連する問題