recibir puede por para ordenador online mandar internet gratis enviar desde aplicacion c# windows-services fax interfax

c# - puede - fax por internet gratis enviar y recibir



¿Cómo puedo enviar un fax para un pdf desde un servicio de Windows usando FAXCOMEXLib? (3)

El problema parece estar relacionado con el proceso llamado "AcroRd32", que abre el fax en Acrobat Reader y lo convierte en un archivo TIFF antes de enviarlo. Este proceso no está liberando memoria.

Intenta detener el proceso de la siguiente manera

Dim myProcesses() As Process Dim myProcess As Process '' How to retrieve the program associat with pdf, when i only know the file extension ? myProcesses = Process.GetProcessesByName("AcroRd32") For Each myProcess In myProcesses If Date.Now.Ticks - myProcess.StartTime.Ticks > TimeSpan.FromSeconds(30).Ticks Then myProcess.Kill() End If Next

Espero que esto sea útil.

He visto esta pregunta antes, pero no he visto ninguna respuesta definitiva, y definitivamente ninguna respuesta que resuelva mi problema. Creé un servicio de Windows para enviar faxes (de forma semiautomática) utilizando la biblioteca de FAXCOMEXLib. Hasta ahora, mi servicio ha tenido éxito en el envío de archivos de texto (.txt). Pero cuando intento enviar archivos pdf, jpg o tif, aparece el error "Error en la operación". En SO, he visto mucha discusión sobre los permisos del usuario con el que se está ejecutando el servicio. He probado muchas opciones diferentes (Servicio local, Usuario local, usuario personalizado con privilegios de administrador, permitir que el servicio interactúe con el escritorio). Pero nada parece marcar la diferencia. Parece que el servicio no tiene permisos para abrir la aplicación apropiada para "imprimir" los archivos pdf, jpg o tif. Pero sólo estoy especulando. ¿Alguien ha tenido éxito en enviar un fax a través de FAXCOMEXLib en un servicio de Windows? Aquí está mi código que envía el fax:

fileName = @"D:/temp/FaxTest.txt"; //THIS WORKS //fileName = @"D:/temp/FaxTest.pdf"; //Operation failed //fileName = @"D:/temp/FaxTest.tif"; //Operation failed faxDoc.Sender.Name = faxRec.From; faxDoc.Sender.Company = faxRec.From; faxDoc.Body = fileName; faxDoc.Subject = faxRec.ReferenceId; faxDoc.DocumentName = faxRec.ReferenceId; var to = "xxxxxxxxxx"; faxDoc.Recipients.Add(to, "Some Name"); var serverName = Environment.MachineName; string[] returnVal = faxDoc.Submit(serverName);

En caso de que se lo pregunte, sí, esos archivos existen en el servidor con esos nombres y son archivos válidos (puedo abrirlos en Adobe Reader y Picture Viewer). Y esto también funciona bien si ejecuto esto localmente en mi máquina dev. Y, por supuesto, el visor apropiado aparece antes de enviar (en mi máquina local). Mi conjetura es que, por alguna razón, el servicio no puede abrir el visor. ¿Alguien ha tenido éxito al enviar un PDF de esta manera en un servicio de Windows?


Está bien documentado en el artículo de MSDN . Lo no trivial que debe suceder es que algunos programas deben convertir el contenido del archivo a texto imprimible que se pueda enviar por fax. Citando

Algunos ejemplos de documentos que puede enviar como cuerpo de fax son un archivo de texto (.txt), un documento de Microsoft Word (.doc) o una hoja de cálculo de Microsoft Excel (.xls). Cuando envía un fax desde una computadora cliente, el cuerpo tiene que estar asociado con una aplicación que está instalada en esa computadora, y la aplicación tiene que admitir el verbo PrintTo; De lo contrario, el fax fallará.

Entonces, una prueba simple que puede hacer es hacer clic derecho en el archivo en el Explorador y buscar el comando "Imprimir". A continuación, arrastre el archivo a una impresora para ejercitar el verbo PrintTo. Si estas pruebas fallan, entonces no funcionará y necesita instalar una aplicación que sepa cómo imprimir el archivo.

Hacer esto desde un servicio pone requisitos adicionales en la aplicación que hace la impresión. Hay muchos de ellos que no se comportan particularmente bien en un servicio. Especialmente cuando intenta imprimir, Microsoft recomienda encarecidamente que nunca lo haga en un servicio. Las aplicaciones de Office, por ejemplo, no lo hacen en los últimos tiempos, por lo que los consejos de MSDN ya son un punto débil.

En mi máquina, la extensión .tif está asociada con una aplicación UWP, que tampoco va a funcionar en un servicio. Dar un buen consejo es difícil dado el gran número de aplicaciones que manejan estas populares extensiones, es mejor ir a superuser.com y nombrar la extensión específica, la versión de Windows y la aplicación que prefiera usar. Hacer esto desde una sesión de usuario es ciertamente el menos molesto.


Quiero dar una respuesta completa a esto. Las respuestas publicadas anteriormente tenían parte de la solución, pero no ofrecían una imagen completa de todo lo que teníamos que hacer para enviar con éxito un archivo pdf a través de una línea de fax, utilizando FAXCOMEXLib en nuestro servicio personalizado de Windows.

Quiero comenzar diciendo que FAXCOMEXLib está hecho para una aplicación de consola de Windows, no un servicio de Windows. Incluso puedes leer esto en la documentación. Y creo que por eso tuvimos tantos problemas para que funcionara.

Sin embargo, pudimos hacerlo funcionar (finalmente) después de muchas pruebas y errores. La mayoría de los problemas que enfrentamos estaban relacionados con la configuración y los permisos en Adobe Reader. Lo que descubrimos es que Adobe Reader intentaba hacer muchas cosas entre bastidores al procesar un archivo PDf. Y esas "cosas" que estaba tratando de hacer necesaria la interacción del usuario (haciendo clic en los cuadros de alerta, etc.). Cuando se ejecuta esto bajo un servicio de Windows, no hay interacción del usuario de ese servicio, lo que causó que nuestro proceso se bloquee indefinidamente y finalmente se produzca un error. Pero, encontramos que hay una manera de evitar todo eso. Así es como lo hicimos:

Aquí está el fragmento de código que estamos usando que funciona:

fileName = @"D:/temp/FaxTest.pdf"; faxDoc.Sender.Name = faxRec.From; faxDoc.Sender.Company = faxRec.From; faxDoc.Body = fileName; faxDoc.Subject = faxRec.ReferenceId; faxDoc.DocumentName = faxRec.ReferenceId; var to = "xxxxxxxxxx"; faxDoc.Recipients.Add(to, "Some Name"); var serverName = Environment.MachineName; var myProcesses = Process.GetProcessesByName("AcroRd32"); foreach (var myProcess in myProcesses) { if (DateTime.Now.Ticks - myProcess.StartTime.Ticks > TimeSpan.FromSeconds(30).Ticks) { myProcess.Kill(); } } string[] returnVal = faxDoc.Submit(serverName);

Hay más código que este en nuestro servicio, por supuesto. El otro código hace cosas como manejar los controladores de eventos de devolución de llamada para rastrear el estado del envío / finalización / error de los faxes, etc. Pero este es el "corazón" del código que realmente inicia el "envío".

Y aquí hay una lista de los cambios de configuración que hicimos en el servidor para que nuestro servicio de Windows personalizado decodifique, renderice y envíe archivos pdf como faxes. Algunos de estos están listados en algunas de las respuestas, pero otros no, y quería que esta fuera una respuesta completa.

  1. Inicie sesión como administrador en el servidor e instale la función Servidor de fax en el servidor.
  2. Asegúrese de que el dispositivo / tarjeta de módem de fax esté instalado correctamente en el servidor y que la línea de fax esté activa. Puede intentar enviar un par de faxes de prueba con archivos de texto directamente desde la utilidad de fax de Windows. (En nuestro caso tuvimos problemas porque tuvimos que marcar "9" y un código de acceso secreto para obtener una línea externa de larga distancia).
  3. Instale Adobe Reader en el servidor.
  4. Cree un usuario en el servidor para que su servicio de Windows se ejecute "como". Llamamos a nuestro usuario "FaxServiceUser".
  5. Inicie sesión en el servidor como este FaxServiceUser al menos una vez. Una vez que haya iniciado sesión, configure el dispositivo "Adobe PDF" como la impresora predeterminada.
  6. También, mientras esté conectado como este usuario, abra un archivo PDF con Adobe y haga clic en el EULA.
  7. Mientras esté conectado como este usuario, y mientras tenga Adobe Reader abierto, cambie esta configuración:
    • Si está marcado, desmarque "Mostrar mensajes cuando inicie Reader" (En "General")
    • Desmarque la casilla de verificación "Habilitar Modo Protegido" al inicio (Esto podría aplicarse solo a Acrobat 10. En Acrobat 11, esta opción se movió a Seguridad (Mejorada) y se titula Habilitar Modo Protegido al inicio. Solo asegúrese de desmarcar marque esta opción)
    • Desmarque la casilla "Habilitar seguridad mejorada" (Bajo "Seguridad (mejorada)", esto podría aplicarse solo a Acrobat 11 y versiones posteriores)
    • Seleccione la opción Actualizador y desactive las actualizaciones automáticas de descarga e instalación.
    • Desmarque "Crear enlaces desde URL" (Bajo "General")
    • Desmarque "Hacer que la herramienta de mano lea artículos" (Bajo "General")
    • Desmarque "Mostrar mensajes cuando inicie Reader" (Bajo "General")
    • Desmarque "Calcular automáticamente los valores de campo" (Bajo "Formularios")
    • Desmarque "Mostrar rectángulos de enfoque" (Debajo de "Formularios")
    • Desmarque "Mostrar indicador de desbordamiento de campo de texto" (Bajo "Formularios")
    • Desmarque "Habilitar JavaScript Acrobat" (debajo de "Javascript")
    • Desmarque "Mostrar diálogo de bienvenida" (debajo de "Revisar")
    • Desmarque "Mostrar el diálogo de advertencia de conexión del servidor al abrir el archivo" (En "Revisión")
  8. Si es necesario, consulte este enlace para obtener ayuda con la configuración de Adobe Reader: http://kb.faxback.com/How+To+Configure+Adobe+XI+for+Use+with+NET+SatisFAXtion
  9. Después de construir, implementar e instalar su servicio de Windows, cambie las propiedades de su servicio para que se ejecute "como" el usuario que creó anteriormente ("FaxServiceUser" en nuestro caso).
  10. Agregue permisos para ese FaxServiceUser a cualquiera de las carpetas que necesita leer / escribir / eliminar de / a.
  11. Ya que Adobe debe ejecutarse como una aplicación de escritorio, agregue algo de código en su servicio para liberar la memoria utilizada por Adobe Reader (puede ver cómo lo hicimos en la función myProcess.Kill() en el código de muestra).

Y eso debería hacerlo. Es un poco engorroso, pero espero que este sea un ejemplo completo de cómo configurar Adobe Reader junto con su servicio personalizado de Windows para enviar faxes desde archivos pdf a un servidor Windows. Lo hemos estado haciendo durante un par de meses sin problemas. Nuestro cliente hace un volumen bajo de faxes, por lo que no puedo hablar de cómo funciona esto con un volumen alto de faxes. Entonces, si está buscando una manera "gratuita" de enviar faxes, sin pagar por algo como Interfax, esta podría ser una opción viable, al menos para un volumen bajo.