c# .net asp.net ms-word office-automation

c# - Obtención de un error de referencia de objeto en prod solo cuando se intenta utilizar Word DocumentClass



.net asp.net (4)

Estoy escribiendo un programa que usa una plantilla .dotx y realiza una fusión de datos en una página aspx. El programa funciona perfectamente en mi estación de trabajo Dev localmente, pero cuando lo despliego en un servidor IIS de prueba, falla en la segunda línea a continuación y me da un error de referencia de objeto.

Me encontré con problemas antes porque el objeto Word Com no estaba en el servidor IIS, así que cargué Word en el servidor y establecí el permiso en DCom y supere ese problema. Pero ahora obtengo este error en la línea que comienza con wRange = .....

Como dije, el programa funciona perfectamente localmente en modo de depuración.

¿Algunas ideas?

Microsoft.Office.Interop.Word.DocumentClass System.NullReferenceException: Object reference not set to an instance of an object

líneas de código:

Document BaseDocument = oWord.Documents.Open(ref oTemplate, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing); wRange = BaseDocument.Bookmarks.get_Item(ref endOfDoc).Range;


Si la palabra realmente está instalada en el servidor, compruebe si la cuenta de usuario donde se ejecuta IIS tiene realmente permiso en el Microsoft.Office.Interop Assembly


Su programa no funciona localmente en modo de depuración. Simplemente no has ejercitado ninguno de los errores.

Nunca debe, bajo ninguna circunstancia, usar ninguna de las API de Automatización de Office desde una aplicación ASP.NET o cualquier otra aplicación de servidor. Estas API están diseñadas como llamadas a una aplicación de escritorio interactiva. Muchas de las suposiciones que hacen no se aplican a las aplicaciones de servidor.

Por ejemplo, una aplicación de escritorio se sincroniza mediante acciones de usuario convirtiéndose en mensajes en la cola de mensajes de Windows. No hay cola de mensajes de Windows en su aplicación ASP.NET, por lo que el acceso a los datos compartidos no está sincronizado. Es posible que las pruebas simplemente nunca hayan provocado la ejecución de varios subprocesos al mismo tiempo.

Puede haber datos que existen en una sola copia para todos los usuarios de un componente COM dado. Esto funciona bien en una aplicación de escritorio, ya que solo hay un usuario único. Su aplicación ASP.NET tiene muchos usuarios todos ejecutando código al mismo tiempo. Otra suposición violada.

Todas estas cosas producirán errores sutiles que en realidad no se pueden arreglar. Solo se pueden mover, dejándote pensar que has resuelto el problema, hasta el momento en que te das cuenta de que hay un problema más. Este ciclo nunca termina y nunca puede finalizar, porque no habrá resuelto el problema real: el problema fue que estaba usando una API de automatización de Office desde una aplicación de servidor.

Arregle ese problema y no tendrá más errores de este tipo.

PD: También sucede que puede estar violando su licencia para Microsoft Word, a menos que todos los usuarios de su aplicación ASP.NET tengan licencias para la aplicación Word.


Después de instalar Office en la máquina de destino, asegúrese de abrir una de las aplicaciones como Word directamente porque puede haber más solicitudes para activar la licencia. La API no funcionará hasta que haya completado este proceso y los errores generados no serán claros en cuanto a cuál es realmente el problema.

Por lo tanto, NullReferenceException puede deberse a que Word no puede abrir el documento, por lo que Word.Documents.Open () devolverá nulo. Para ser sincero, no estoy 100% seguro de que esto sea lo que está causando su problema. Como dije, los errores no le dirán claramente cuál es el problema. (Me encontré con este escenario hace un tiempo y aunque sé que la API lanzaba una excepción, no recuerdo si es igual a lo que está viendo).


  1. Haga clic en Inicio, haga clic en Programas, haga clic en Herramientas administrativas, haga clic en Servicios de componentes.
  2. Expanda Servicios de componentes, expanda Computadoras, expanda Mi PC, expanda Configuración DCOM y haga clic con el botón derecho en Microsoft Word 97 - Documento 2003 . Seleccionar propiedades
  3. Haga clic en General. Establezca el nivel de autenticación para conectarse (ninguno también funciona).
  4. Haga clic en Identidad. Establecer este usuario . Especifique una cuenta de usuario que siempre se utilizará para ejecutar la aplicación COM, independientemente de qué usuario esté accediendo a ella.
  5. Haga clic en el botón Aplicar.
  6. Haga clic en el botón Aceptar. ◦Para obtener más información sobre "Configuración de DCOM para acceso remoto", visite https://danieladeniji.wordpress.com/configuring-dcom-for-remote-access/