В вашем коде у вас есть:
excel.Workbooks.Open(...)
excel.Workbooks
создает COM-объект. Затем вы вызываете функцию Open
из этого COM-объекта. Однако вы не освобождаете COM-объект, когда вы закончили.
Это обычная проблема при работе с COM-объектами. В принципе, в вашем выражении никогда не должно быть более одной точки, потому что вам нужно будет очистить COM-объекты, когда вы закончите.
Тема просто слишком велика, чтобы полностью исследовать ответ, но Я думаю, вы найдете статью Джейка Гиннивана по этому вопросу чрезвычайно полезной: VSTO и COM Interop
Если вы устали от всех вызовов ReleaseComObject, вы можете найти этот вопрос полезным: Как правильно очистить объект взаимодействия Excel в C #, редакция 2012 года
Принятый ответ не работает по указанным причинам. Я разместил комментарий со ссылкой на вопрос, в котором описывается хакерство, позволяющее обойти проблему прозрачной обработки 302 браузером:
Как управлять запросом перенаправления после вызова jQuery Ajax
Однако это немного грязный хак, и после долгих поисков я нашел то, что я считаю лучшим решением - используйте JSON . В этом случае вы можете сделать так, чтобы все ответы на запросы ajax имели код 200, а в теле ответа вы добавили какой-то объект JSON, который ваш обработчик ответов ajax может затем использовать соответствующим образом.
function doAjaxCall() {
$.ajaxSetup({complete: onRequestCompleted});
$.get(yourUrl,yourData,yourCallback);
}
function onRequestCompleted(xhr,textStatus) {
if (xhr.status == 302) {
location.href = xhr.getResponseHeader("Location");
}
}
Я так не думаю. В W3C сказано, что перенаправления HTTP с определенными кодами состояния, включая 302, должны выполняться прозрачно. Цитата ниже:
Если ответ представляет собой перенаправление HTTP (код состояния 301, 302, 303 или 307), тогда он ДОЛЖЕН прозрачно соблюдаться (если он не нарушает меры безопасности или бесконечного цикла). Любая другая ошибка (включая 401) ДОЛЖЕН заставлять объект использовать эту страницу с ошибкой в качестве ответа.
В качестве эксперимента я попытался выполнять запросы Ajax из различных браузеров (Firefox 3.5, Chrome, IE8, IE7, IE6) на сервер, выдающий код состояния 302 , и отображение статуса в объекте запроса браузера. В каждом случае получалось 200.