Microsoft Fax: Operation Failed Error code 0x35 (53)

Da parecchi anni uso con soddisfazione il servizio fax di Microsoft offerto a partire da Windows 2003 server e XP decisamente semplice da configurare e da utilizzare con il pregio di poter essere semplicemente utilizzato nelle applicazioni (a riguardo si vedano Broadcasting a Fax e Sending a Fax).

In particolare in una applicazione .NET è possibile utilizzare il seguente codice (in VB.NET):

Dim document As FAXCOMEXLib.FaxDocument = Nothing

Try

   ‘Creazione Documento
   document = New FAXCOMEXLib.FaxDocument

   ‘Impostazione Destinatario
   document.Recipients.Add(Me.txtFax.Text, Me.txtRecipient.Text)

   ‘Impostazione Oggetto
   document.Subject = Me.txtSubject.Text

   ‘Impostazione Body
   document.Body = Me.txtFile.Text

   ‘Chiusura Acrobat Reader aperti precedentemente
   If System.IO.Path.GetExtension(Me.txtFile.Text).ToLower() = “.pdf” Then
      For Each p As System.Diagnostics.Process In System.Diagnostics.Process.GetProcesses()
         If (p.ProcessName.ToLower() = “acrord32” OrElse p.ProcessName.ToLower() = “acrobat”) Then
            p.CloseMainWindow()
         End If
     Next
   End If

   ‘Invio Fax
   document.Submit(My.Settings.ServerFax)

Catch ex As Exception
   MsgBox(ex.Message & ControlChars.NewLine & “Error code: “ & Hex(Err.Number) & “(“ & Err.Number & “)”, _
      MsgBoxStyle.Critical, “Errore durante invio fax”)

Finally
   ‘Rilascio risorse
   If Not document Is Nothing Then
      System.Runtime.InteropServices.Marshal.ReleaseComObject(document)
      document = Nothing
   End If

   ‘Chiusura processi Acrobat Reader
   If System.IO.Path.GetExtension(Me.txtFile.Text).ToLower() = “.pdf” Then
      For Each p As System.Diagnostics.Process In System.Diagnostics.Process.GetProcesses()
         If (p.ProcessName.ToLower() = “acrord32” OrElse _
            p.ProcessName.ToLower() = “acrobat”) Then
            p.CloseMainWindow()
         End If
      Next
   End If
End Try

Dove Me.txtFile.Text contiene il path del file del contenuto del fax, automaticamente verrà aperto l’interprete corretto in base alle impostazioni sull’estensione del file per aprire quest’ultimo all’atto dell’invio. Quindi se il file è un pdf verrà aperto il reader pdf predefinito per poter interpretare il file. A tal proposito si noto che se il reader pdf è Acrobat Reader occorerà non avere processi attivi di quest’ultimo affinchè il l’invio vada a buon fine (per questo è necessario il codice per chiudere i processi acrobat prima dell’invio e per pulizia per chiudere il processo dopo l’invio).

Se durante l’invio viene sollevata un’eccezione Operation Failed con codice di errore 0x35 (53 in decimale) significa che il file del fax non è disponibile all’atto dell’invocazione del metodo Submit. A tal riguardo può tornare utile la seguente tabella contenente il codice e il significato dei principali errori:

Error Number

Error Message

5 Procedure call or argument is not valid
6 Overflow
7 Out of Memory
11 Division by Zero
51 Internal Error
52 Bad file name or number
53 File not found
55 File already open
76 Path not found
482 Printer error

 

Nel mio caso il codice per l’invio del fax era contenuto in un thread e l’applicazione dopo l’invio ed altre elaborazioni eliminava il file, risultato saltuariamente i fax non venivano inviati restituendo l’errore 0x35. Questo malfunzionamento si presentava quando l’elaborazione durava meno del tempo necessario al Submit per consegnare il fax al Fax server.

L’errore 0x35 (53) non va confuso in questo caso con il codice di errore di sistema descritto in System Error Codes (0-499) ovvero “ERROR_BAD_NETPATH The network path was not found” che mi ha portato in primo momento fuori strada facendomi pensare ad un errore di rete.