У меня проблема с открытием документа Word с сайта ASP.NET. Решение отлично работает на Windows 2003 Server, но не работает на Windows 2008 Server x64 и Windows 7 x64.
Чтобы упростить решение, я создал сайт ASP.NET MVC 3 и попытался открыть оттуда текстовый документ.
Среда у меня: Windows 7 x64 и MS Office 2010 x64
Код для открытия документа следующий:
public ActionResult WordTest()
{
var fullFileName = @"C:\inetpub\wwwroot\fpub\TestDocument.docx";
var impersonation = new ImpersonationManager();
impersonation.Impersonate();
try
{
var application = new Application();
try
{
Type documentsType = application.Documents.GetType();
var document =(_Document)documentsType.InvokeMember("Open", BindingFlags.InvokeMethod, null, application.Documents,
new object[] {fullFileName});
try
{
return View(new ModelData {Result = document == null ? "Bad" : "OK"});
}
finally
{
if (document != null)
{
document.Close(false);
Marshal.ReleaseComObject(document);
}
}
}
finally
{
application.Quit(false);
Marshal.ReleaseComObject(application);
}
}
finally
{
impersonation.CloseImpersonation();
}
}
Во-первых, я делаю олицетворение, чтобы использовать учетную запись доверенного домена для взаимодействия слов (ImpersonationManager - это пользовательский компонент). У этого пользователя есть права на открытие \ сохранение \ закрытие приложения Word. В моих тестах это мой собственный аккаунт:)
Затем я создаю экземпляр приложения Word. WINWORD процесс запускается под олицетворенной учетной записью.
Но после вызова метода «Open» он всегда возвращает ноль. Нет исключений, нет информации в программе просмотра событий.
Более того, после этого процесс Word загружает ЦП на 100% (1 ядро ЦП).
Если я запускаю тот же код (без олицетворения), что и консольное приложение, оно работает нормально.
Интересно, в чем здесь проблема?
Обновление Работает нормально, если в качестве хоста для сайта используется сервер разработки Visual Studio